javascript变量范围在函数混乱中

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()调用之后.那么,为什么警报消息是10undefined分别?

Nat*_*pel 10

这是因为当你声明它时,你的变量会被解释器的"包含"范围"提升".所以你的代码最终被解释为:

function abcd()
{
 var a;
 alert(a); //alerts undefined
 a = 5;
}
Run Code Online (Sandbox Code Playgroud)

为了避免这种混淆,您可以遵循一些将保持原样的实践,例如var在函数开头声明本地作用域(即,在函数作用域内使用关键字声明的变量)变量.

请注意,正如您可以从文章中读到的那样,嵌套函数也会发生这种情况.