javascript全局变量范围

javascript全局变量范围,javascript,coding-style,Javascript,Coding Style,所以我听说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

所以我听说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”会导致性能下降吗?谢谢。

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

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

foo = function() {}
它应该是全球性的

出于以下原因,通常不建议省略
var

  • 变量解析从最局部的开始,朝着全局名称空间的方向发展,使其速度变慢。在某些浏览器中要慢得多
  • 通过污染全局名称空间,最终可能会产生命名冲突。比如说,最严重的违规者之一是(i=0;i(注意缺少
    var
由于一个名为

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

var foo = function foo() {}

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

+1表示使用
..=函数foo(){}
。我不知道你可以这样叫两个名字。