这是2个javascript函数

var a = 10;
function abcd()
{
 alert(a);//alerts 10
 a=5;
}

这是另一个代码
var a = 10;
function abcd()
{
 alert(a);//alerts undefined
 var a=5;
}

在这两个函数中,分配/声明都在alert()调用之后。
那么,为什么警报消息分别是10undefined

最佳答案

这是因为在声明变量时,解释器会将其获取为"hoisted" up of its containing scope。因此,您的代码最终将被解释为:

function abcd()
{
 var a;
 alert(a); //alerts undefined
 a = 5;
}
为避免这种困惑,您可以遵循一些可以使事情保持原样的做法,例如在函数开始时声明局部变量(即,在函数范围内用关键字var声明的变量)。
请注意,正如您从本文中所读到的那样,嵌套函数也会发生这种情况。

关于函数困惑中的javascript变量作用域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22308379/

10-09 17:53
查看更多