844560
下面这段code 来自阮一峰大大的ECMAScript 6 入门,讲的是let的用法 第一种: var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a [6] (); // 10 第二种: var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a [6] (); // 6 阮大大给出的解释是: 变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。这个是可以理解。
我的疑问是:let声明的10个i为什么没有被释放掉? 我的理解: 因为function 函数是在for块内,所以function 可以访问for中的局部变量 i。而function又被赋值给了全局变量a[],这就会导致那个10个不同的 i 不会被回收掉。 那么这算不算是一种闭包?