JavaScript容易理解錯(cuò)誤的例子

1
for (var i = 1; i <=5; i++){ setTimeout(function timer() { console.log(i); }, i*1000); }//輸出五次6
2
for (let i = 1; i <=5; i++){ setTimeout(function timer() { console.log(i); }, i*1000); } //輸出1,2,3,4,5
3
for (var i = 1; i <=5; i++){ (function () { var j = i; setTimeout(function timer() { console.log(j); }, j*1000); })(i);} //輸出1,2,3,4,5
4
改進(jìn)這段代碼
for (var i =1; i<=5; i++){ (function (j) { setTimeout(function timer() { console.log(j); }, j*1000); })(i);}
代碼1中到底有什么缺陷導(dǎo)致它的行為同語義所暗示的不一致呢?
缺陷是我們?cè)噲D假設(shè)循環(huán)中的每個(gè)迭代在運(yùn)行時(shí)都會(huì)給自己“捕獲”一個(gè)i的副本,但是根據(jù)作用域的工作原理,實(shí)際情況是盡管循環(huán)中的五個(gè)函數(shù)實(shí)在各個(gè)迭代中分別定義的,但是他們都被封閉在一個(gè)共享的全局作用域中,因此實(shí)際上只有一個(gè)i.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 7,842評(píng)論 2 17
  • 單例模式 適用場(chǎng)景:可能會(huì)在場(chǎng)景中使用到對(duì)象,但只有一個(gè)實(shí)例,加載時(shí)并不主動(dòng)創(chuàng)建,需要時(shí)才創(chuàng)建 最常見的單例模式,...
    Obeing閱讀 2,104評(píng)論 1 10
  • 某次二面時(shí),面試官問起Js排序問題,吾絞盡腦汁回答了幾種,深感算法有很大的問題,所以總計(jì)一下! 排序算法說明 (1...
    流浪的先知閱讀 1,212評(píng)論 0 4
  • 三、閉包和高階函數(shù) 3.1 閉包 3.1.1 變量的作用域 所謂變量的作用域,就是變量的有效范圍。通過作用域的劃分...
    梁同學(xué)de自言自語閱讀 1,494評(píng)論 0 6
  • 我,身高不高,顏值不高,學(xué)歷不高,背景不高,智商不高,情商也不高。 一個(gè)普普通通的女生,從小就有著一個(gè)不普通的夢(mèng)想...
    生活不止想象閱讀 347評(píng)論 0 0