關於 let 在 for 循環中的理解

  每次閱讀 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

  

相關文章
相關標籤/搜索