为什么{var foo = foo}没有抛出一个ReferenceError?

Moh*_*sen 3 javascript scope

为什么不var foo = foo扔ReferenceError?

注意:foo = foo扔了ReferenceError.

Den*_*ret 5

当你申报时

var foo = ...
Run Code Online (Sandbox Code Playgroud)

你声明整个范围的变量(即你的函数,如果不是全局的),而不仅仅是之后的代码,与其他语言相反.

因此,在赋值的正确部分,foo已经声明,即使它仍然存在undefined.没有参考错误.

请注意,javascript中var声明的这个属性可能是错误的来源.因为你很可能(更复杂)这种代码:

if (true) {
    var a = 3; // do you think this is "local" ?
}
var a;
alert(a); // a is 3, did you expect it ?
Run Code Online (Sandbox Code Playgroud)