每次閱讀 ECMAScript 6 入門 時,關於其中的一塊代碼,老是不能很好的理解。以下html
var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6
與之對應的 若是使用 var 定義變量 i,最後都是輸出10 ,這個都沒什麼問題,那是由於for不是塊級做用域,變量 i 直接是全局變量。閉包
咱們都知道,在ES6中,let 的做用域是塊級的,也就是說,在for循環中,每一次的都會從新定義一個變量 i。這個能夠參考阮一峯老師的ECMAScript6入門。
ecmascript
要想理解上圖,請先閱讀個人另外兩片博客 閉包 和 做用域鏈。
從上圖中,咱們能夠很清晰的看見,不一樣的函數對應的做用域鏈就不一樣,也就形成了取到的 i 的值不一樣。函數
下面給出 使用 var 定義是的圖解,就能更好的理解這個問題了。spa