javascript全局变量范围

ran*_*mor 4 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?
      }
})
Run Code Online (Sandbox Code Playgroud)

如果它是全局的,为什么我无法在控制台中访问它.如果它不是全局的,并且它的范围在函数中,那么省略"var"会花费一些性能吗?谢谢.

Eri*_*lin 13

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

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

foo = function() {}
Run Code Online (Sandbox Code Playgroud)

它应该是全球性的.

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

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

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

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

var foo = function foo() {}
Run Code Online (Sandbox Code Playgroud)

因为它给函数一个"名称"而不是被视为匿名函数,这将有助于调试.function我相信,大多数人不这样做并宣布使用.

  • +1使用`... = function foo(){}`.不知道你可以像这样双名. (3认同)