在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ ES6中l(wèi)et聲明變量問(wèn)題

ES6中l(wèi)et聲明變量問(wèn)題

今天看ES6的一篇文章里這樣寫(xiě):

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

文檔中說(shuō),上面代碼中,變量i是let聲明的,當(dāng)前的i只在本輪循環(huán)有效,所以每一次循環(huán)的i其實(shí)都是一個(gè)新的變量,所以最后輸出的是6。

但是a[6]不是function(){console.log(i)}嗎?當(dāng)運(yùn)行a[6]()的時(shí)候,由于i是let聲明的,只在塊級(jí)作用域中有效,不應(yīng)該是打印出undefined嗎?怎么會(huì)是6呢?

回答
編輯回答
薄荷綠

for每次循環(huán)生成一個(gè)新的作用域,fuction內(nèi)的i訪問(wèn)的是這個(gè)作用域內(nèi)的i,大概可以像這樣理解:

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    let j=i
    console.log(j);
  };
}
a[6](); // 6

可以將源代碼使用 babel轉(zhuǎn)義看看:

clipboard.png

2017年9月29日 14:18
編輯回答
旖襯

i是在外部的大括號(hào)聲明的,所以在內(nèi)部的大括號(hào)也生效,反之就不行了,可以簡(jiǎn)單理解為作用域向下傳遞

2018年1月13日 10:02
編輯回答
笨小蛋

巧了,我正好寫(xiě)過(guò)這個(gè)問(wèn)題的文章,你可以看一下。
。。雖然我當(dāng)時(shí)覺(jué)得寫(xiě)得很清楚,但是現(xiàn)在讀了下,感覺(jué)看不懂,不過(guò)意思還是這個(gè)意思
我之前對(duì)這個(gè)問(wèn)題的解析

2017年8月23日 04:52