先上代码
let a = "top";
var fn;
{
let a = "level1";
fn = function(){
console.log(a);
}
}
fn(); // 输出的结果是: level1
这是一段有关ES6中块级作用域的代码。我的问题是:
1.块级作用域,不应该是出了块后,就消失了吗?为何我在块外调用fn()的时候,依然可以找到那个块级作用域?
2.let 产生的块级作用域,在内存中,到底是如何工作的?
想了两天了,也查了不少资料,但对于块级作用域的介绍,好像不是很全,尤其是从内存角度的分析。
fn变量不是在块外吗?块内因为闭包能对fn赋值很正常呀
fn里能打印a也是因为闭包可见呀
至于块只是扩展了一下闭包的限制,内存上没有什么区别,该标记标记,该回收回收