0

我确实明白,由于词法作用域,块作用域可以访问封闭作用域变量。但我不明白它是如何工作的。前任:

function first(){
  let i=10;
  function second(){
    let j=20;
    console.log(i);
    if(j==20){
    console.log(i);
  } 
  }
  second();
}

第一个 console.log() 在查找变量对象中的作用域链后获取 i 的值。但是块内的 console.log() 如何访问变量 i 因为它没有创建执行上下文,因此没有范围链。

4

1 回答 1

0

Node.js 引擎将提升(通过提升)的变量和函数声明存储到声明该变量或函数的特定范围的顶部。分配操作不会被提升。因此引擎知道在哪个范围变量或函数中声明。

https://medium.com/@venomnert/how-js-engine-reads-your-code-df3cd36e4192

上面的文章描述了 js 引擎如何找到变量和其他一些有助于理解闭包和代码执行的概念。

于 2021-10-07T06:08:50.677 回答