繁体   English   中英

这个变量不应该默认为“顶级”吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM