Roh*_*thi 5 javascript scope hoisting
这里有2个javascript函数
var a = 10;
function abcd()
{
alert(a);//alerts 10
a=5;
}
Run Code Online (Sandbox Code Playgroud)
另一个代码就是这个
var a = 10;
function abcd()
{
alert(a);//alerts undefined
var a=5;
}
Run Code Online (Sandbox Code Playgroud)
在两个函数赋值/声明中都是在alert()调用之后.那么,为什么警报消息是10和undefined分别?
Nat*_*pel 10
这是因为当你声明它时,你的变量会被解释器的"包含"范围"提升".所以你的代码最终被解释为:
function abcd()
{
var a;
alert(a); //alerts undefined
a = 5;
}
Run Code Online (Sandbox Code Playgroud)
为了避免这种混淆,您可以遵循一些将保持原样的实践,例如var在函数开头声明本地作用域(即,在函数作用域内使用关键字声明的变量)变量.
请注意,正如您可以从文章中读到的那样,嵌套函数也会发生这种情况.