第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

JavaScript循環(huán)內(nèi)的閉包為什么返回的是最后一個(gè)值

JavaScript循環(huán)內(nèi)的閉包為什么返回的是最后一個(gè)值

牛魔王的故事 2019-04-14 10:35:45
錯(cuò)誤寫法for(vari=0;i
查看完整描述

2 回答

?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

//每次循環(huán)會(huì)調(diào)用setTimeout函數(shù),其中指定了一個(gè)timeout后執(zhí)行的函數(shù)
//這個(gè)函數(shù)因?yàn)闃?gòu)成閉包的關(guān)系,其能夠訪問外層函數(shù)定義的變量,這個(gè)變量就是i
//在for循環(huán)執(zhí)行完畢后,i的值為10.此時(shí)在事件隊(duì)列中有10個(gè)timeout函數(shù)等待執(zhí)行
//當(dāng)timeout時(shí)間到時(shí),對(duì)應(yīng)的執(zhí)行函數(shù)調(diào)用的i都是同一個(gè),也就是10
for(vari=0;i<10;i++){
setTimeout(function(){
console.log(i);
},1000);
}
//在for循環(huán)中定義了匿名立即執(zhí)行函數(shù)
//通過(guò)將每次循環(huán)時(shí)產(chǎn)生i傳入匿名立即執(zhí)行函數(shù),立即執(zhí)行函數(shù)就有了一個(gè)內(nèi)部變量e,
//其值是傳入的i
//setTimeout函數(shù)形成閉包,能訪問到其外層函數(shù)也就是匿名立即執(zhí)行函數(shù)的變量e
//因?yàn)閑引用關(guān)系的存在,匿名立即執(zhí)行函數(shù)不會(huì)被馬上銷毀掉
//timeout時(shí)間一到,指定執(zhí)行函數(shù)調(diào)用的e就是每次傳入的參數(shù)i
for(vari=0;i<10;i++){
(function(e){
setTimeout(function(){
console.log(e);
},1000);
})(i);
}
//整個(gè)和上面的類似,只不過(guò)把匿名立即執(zhí)行函數(shù)傳遞給setTimeout的第1個(gè)參數(shù)中
//匿名立即執(zhí)行函數(shù),顧名思義就是需要立即執(zhí)行的呀。
//所以setTimout函數(shù)對(duì)應(yīng)的超時(shí)執(zhí)行函數(shù)(第1個(gè)參數(shù))
//為匿名立即執(zhí)行函數(shù)執(zhí)行的結(jié)果,也就是返回的函數(shù)。
//接下來(lái)理解就和上面一樣啦
for(vari=0;i<10;i++){
setTimeout((function(e){
returnfunction(){
console.log(e);
}
})(i),1000)
}
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-14
?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

因?yàn)镋S6之前沒有塊作用域
for(vari=0;i<10;++i){
setTimeout(function(){
console.log(i)
},1000)
}
有塊作用域時(shí)效果如同
for(vari=0;i<10;++i){
varj=0
j=i
setTimeout(function(){
console.log(j)
},1000)
}
就是塊內(nèi)代碼引用的i變量均不是指向同一個(gè)變量。而ES6則引入let關(guān)鍵字來(lái)標(biāo)識(shí)變量位于塊作用域內(nèi)
for(leti=0;i<10;++i){
setTimeout(function(){console.log(i)},1000)
}
當(dāng)然在ES3/5下除了通過(guò)IIFE構(gòu)造作用域外,還可以通過(guò)with來(lái)構(gòu)造
for(vari=0;i<10;++i)with({i:i}){
setTimeout(function(){console.log(i)},1000)
}
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-14
  • 2 回答
  • 0 關(guān)注
  • 571 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)