0

可能重复:
Javascript 作用域变量理论

大家好,

我想问一些陌生的东西。这是代码。

var a = "已定义";
函数 f() {
   警报(一);
   变量 a = 5;
}
F();

警报“未定义”

任何人都可以解释为什么我得到“未定义”。

法蒂赫..

4

2 回答 2

2

我想这就是所谓的JavaScript 提升。观看此视频以了解有关它的更多信息及其解决方案:

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

要使其工作,您必须删除var关键字表单变量a

var a = "defined";
function f() {
   alert(a);
   a = 5;
}
f();

所以基本上,这是一个可变范围问题。删除var关键字的行为使变量全局可用。因此,这次没有引发错误。

于 2011-01-12T08:55:59.083 回答
0

在函数中,您将获得一个新范围。

函数中的var a声明了一个局部变量a,它掩盖了全局变量。

to 的分配a稍后发生(在警报之后),因此在此之前a是未定义的。

var a令人困惑的部分是,如果您在函数的顶部或其他任何地方(甚至可以在 if 中)有声明,这并不重要。效果是一样的:它为该范围声明了一个变量(即使对于位于声明之前的代码也有效)。这就是为什么 jslint 建议在顶部声明所有局部变量的原因。

于 2011-01-12T08:58:38.433 回答