【问题标题】:javascript global variable scopejavascript全局变量范围
【发布时间】:2012-01-24 18:53:18
【问题描述】:

所以我听说在没有“var”的情况下初始化的 js 中的变量将是全局的。所以:

$(document).ready(function(){
      function foo(){
         //since i'm not using "var", will this function become global?
      }

      var bar = function(){
         //is this the better way to declare the function?
      }
})

如果它是全局的,为什么我不能在控制台中访问它。如果它不是全局的,并且它的作用域在函数中,那么省略“var”会花费一些性能吗?谢谢。

【问题讨论】:

    标签: javascript coding-style


    【解决方案1】:

    只有没有var 声明的变量才会成为全局变量,这不适用于函数。

    但是,您可以像这样声明 foo:

    foo = function() {}
    

    它应该是全局的。

    通常不建议省略var,原因如下(不经意间):

    • 变量解析从最本地开始,然后向全局命名空间中查找,使其变慢。在某些浏览器中要慢得多。
    • 您最终会因污染全局命名空间而产生命名冲突。例如,最严重的违规者之一是for(i = 0; i < arr.length; i++)(请注意缺少var

    由于名为hoisting 的语言功能,您可能希望使用var 声明函数

    顺便说一句,如果您确实选择使用var 声明函数,我建议您这样做:

    var foo = function foo() {}
    

    因为它给函数一个“名称”而不是被视为匿名函数,这将有助于调试。我相信大多数人不会这样做并使用function 声明。

    【讨论】:

    • +1 用于使用... = function foo() { }。不知道你可以这样重复命名。
    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 2012-07-17
    • 2013-01-24
    • 2012-11-05
    • 2012-04-29
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多