提升如何应用于此JavaScript代码?

时间:2018-07-12 15:08:49

标签: javascript

我知道此代码会因杂物悬挂而显示2,但是我不完全了解该怎么做。

我将列出我所理解的所有内容,如果您能在每个答案旁边回答是或否,将不胜感激。然后,您可以添加任何其他信息。

1)让b = innerMagic()的行引用了innerMagic()函数,该函数返回a;

2)现在,我们为变量a分配了值3,这意味着return b应该返回3。但是,此时将变量设置为2,因此它返回2。您不能在a之前调用变量变量在分配之前。

function magic() {
  let a = 1;
  a = 2;
  let b = innerMagic();
  a = 3;

  return b;

  function innerMagic() {
    return a;
  }
}

console.log(magic())

2 个答案:

答案 0 :(得分:1)

innerMagic在调用时从外部范围获取a的值。因此,当调用innerMagic时,a的值为2。它将此值(2)返回到b,然后返回b(2),这就是您要打印的内容

答案 1 :(得分:1)

“让b = innerMagic()引用innerMagic()函数,该函数返回a;”那不是很正确,它返回的值为2。

此时,ab都保持值为2。a随后被更新为值3,但是b仍具有值2。

要了解价值与参考的关系,请参阅Explaining Value vs. Reference in Javascript

上的这篇文章