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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

應(yīng)該是閉包的問題吧

應(yīng)該是閉包的問題吧

二露 2017-07-16 21:00:41
我想知道這段代碼是怎么執(zhí)行的以及一次性定時器的特點var i=0; for(i=0;i<3;i++){ ? ? console.log(i) ? ? setTimeout(function() { ? ? ? ? return function() { ? ? ? ? ? ? console.log(i) ? ? ? ? } ? ? }(),0) }
查看完整描述

1 回答

?
李曉健

TA貢獻(xiàn)1036條經(jīng)驗 獲得超461個贊

這段代碼會輸出 1 2 3 3 3 3 ,前面輸出的 1 2 3,就是for循環(huán)里面直接輸出的結(jié)果。然后來說說這個定時器里的東西:這個setTimeout里你第一個參數(shù)傳的是一個立即執(zhí)行函數(shù),也就是說當(dāng)js解析器讀到這段代碼時就會立即執(zhí)行,而你這個function里又會返回一個函數(shù),所以

????setTimeout(function()?{
????????return?function()?{
????????????console.log(i)
????????}
????}(),0)
????//就相當(dāng)于
????setTimeout(function()?{
????????console.log(i)
????},0)

這兩種寫法效果是一樣的。然后你第二個參數(shù)是0,大概意思也就是讓定時立即執(zhí)行,但是js是單線程執(zhí)行的,定時器又會被加入到執(zhí)行隊列的最后,即使你給的定時時間是0,他也會等到主線程的東西執(zhí)行完,再來執(zhí)行,for又是同步執(zhí)行,他在主線程里,所以setTimeout里面的內(nèi)容就要等到for循環(huán)執(zhí)行完才能執(zhí)行,當(dāng)for循環(huán)執(zhí)行完的時候,i就已經(jīng)是3了,for循環(huán)里的定時函數(shù)也需要執(zhí)行3次,所以后面就連著3個3,并且地for循環(huán)里的1 2 3 輸出之后才輸出。



如果你的問題已解決,請記得采納答案!


查看完整回答
1 反對 回復(fù) 2017-07-17
  • 二露
    二露
    你好,謝謝你的回答
  • 二露
    二露
    你能幫我在看看 for(var i=0;i++<3;){ }; 這里的for循環(huán)小括號里的含義嗎? 我在for循環(huán)外面也能打印出i的值,它是全局變量嗎
  • 二露
    二露
    我就是給上面的那個問題修改了以下for循環(huán)
點擊展開后面2
  • 1 回答
  • 0 關(guān)注
  • 1228 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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