JavaScript 全局变量作用域

4

我听说在js中,没有使用"var"初始化的变量将是全局变量。所以:

$(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个回答

13

只有没有使用var关键字声明的变量才会成为全局变量,函数不适用于此规则。

然而,你可以这样声明一个名为foo的变量:

foo = function() {}

并且它应该是全局的。

通常不建议省略var,原因如下(来自头脑中):

  • 变量解析从最局部开始,并向全局命名空间查找,因此速度较慢。在某些浏览器中会更慢。
  • 若污染全局命名空间,很容易产生命名冲突。其中最糟糕的情况之一是 for(i = 0; i < arr.length; i++)(注意缺少 var)。

你可能想要使用var声明函数,由于语言特性叫做hoisting.

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

var foo = function foo() {}

因为这样可以给函数赋予一个“名称”,而不是被视为匿名函数,这有助于调试。我相信大多数人都不这么做,而是使用function进行声明。


3
使用 ... = function foo() { } 很不错,加个赞。我之前不知道还能这样双重命名。 - Samantha Branham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接