我确实理解,由于词法作用域,块作用域可以访问封闭作用域变量。但我不明白的是它到底是如何工作的。例如:
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,因为它不创建执行上下文,因此没有作用域链。
发布于 2021-10-07 06:08:51
js引擎将提升(通过提升)变量和函数声明存储到声明该变量或函数的特定作用域的顶部。赋值操作不会被提升。因此引擎知道在哪个作用域变量或函数中声明。
https://medium.com/@venomnert/how-js-engine-reads-your-code-df3cd36e4192
上面的文章描述了js引擎如何找到变量和其他一些概念,这些概念有助于理解闭包和代码的执行。
https://stackoverflow.com/questions/69475835
复制相似问题