javascript全局变量范围

时间:2012-01-24 18:53:18

标签: javascript coding-style

所以我听说在没有“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”会花费一些性能吗?感谢。

1 个答案:

答案 0 :(得分:13)

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

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

foo = function() {}

它应该是全球性的。

由于这些原因(不在头顶),通常不建议省略var

  • 变量分辨率从最本地开始,然后查看全局命名空间,使其变慢。在某些浏览器中速度要慢得多。
  • 通过污染全局命名空间,最终会出现命名冲突。最严重的罪犯之一就是for(i = 0; i < arr.length; i++)(注意缺少var

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

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

var foo = function foo() {}

因为它为函数提供了“名称”而不是被视为匿名函数,这将有助于调试。我相信,大多数人不这样做,并宣布使用function