[英]Shouldn't this variable default to “top-level”?
目前,我得到的结果是不确定的,我不知道为什么。
var variable = "top-level";
function parentFunction() {
function childFunction() {
alert(variable);
}
childFunction();
var variable = "local";
}
parentFunction();
我以为是因为我声明了变量
var variable = "local";
在我调用childFunction()之后,它将查找作用域链并获取顶级变量,但事实并非如此。
发生这种情况是由于提升,该提升将所有var
语句放在函数的顶部,但仍在赋值语句执行的那一行执行。 如果您看下面,第二个var variable
将遮盖全局变量,因为它声明了具有相同名称的局部变量。 然后,这个新声明的变量将一直undefined
直到到达赋值行。
基本上,这是您的代码的作用:
var variable = "top-level";
function parentFunction() {
var variable;
function childFunction() {
alert(variable);
}
childFunction();
variable = 'local';
}
parentFunction();
所有变量声明语句都将移至声明它们的函数的顶部,但是只有在控件到达声明/初始化语句时,才将值赋给它们。 在您的情况下, childFunction
没有variable
,因此它在范围内上升并检查parentFunction
,在此声明了variable
但尚未分配值。 因此,它会警告默认值undefined
。
这称为可变提升。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.