为什么不var foo = foo扔ReferenceError?
注意:foo = foo扔了ReferenceError.
当你申报时
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)