【问题标题】:javascript: creating a local scope of a global variable undefines it before it is setjavascript:创建全局变量的局部范围会在设置之前取消定义它
【发布时间】:2011-04-09 06:18:17
【问题描述】:

我不明白这种行为:

var a = 1;
console.log('a is undefined1:', a == undefined);
var a;

//iterate selected jQuery elements:
jQuery.each(this, function(index, htmlElement) {
    console.log('a is undefined2:', a == undefined);
    var a;

返回
 a 未定义1: false
 a 未定义2:真

如果最后一行 (var a;) 被注释掉,则返回
 a 未定义1: false
 a 未定义2:假

我希望总是后者的输出。我不知道什么?

非常感谢!

【问题讨论】:

    标签: javascript scope closures local undefined


    【解决方案1】:

    var a 放入函数中会创建一个不同的a 变量,该变量的作用域为该函数。

    因为你没有给它赋值,所以它是未定义的。

    当您将其注释掉时,您正在测试外部 a,其值为 1。

    变量被提升。无论您在函数的哪个位置使用var foo,该函数的foo 仍然适用于整个函数。

    【讨论】:

    【解决方案2】:

    使用var 在函数内声明变量会在整个函数上生成具有范围的本地副本(新变量) - 在声明之前是否使用它并不重要。

    永远不要在没有var 的情况下声明变量。

    如果你想访问全局变量并且你有同名的局部变量,你可以使用window.foo访问全局变量foo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-05
      • 2018-09-02
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多