这是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()调用之后。
那么,为什么警报消息分别是
10
和undefined
? 最佳答案
这是因为在声明变量时,解释器会将其获取为"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/