JS 函數(shù)的執(zhí)行時機

為什么如下代碼會打印 6 個 6?

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

因為JS是單線程運行的。
setTimeout語句在循環(huán)結束時才會執(zhí)行,循環(huán)結束時i已經(jīng)變成了6,所以會打印出6個6

讓上面代碼打印 0、1、2、3、4、5 的方法:

  1. 使用 for let 配合
for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  1. 利用函數(shù)作用域
let i = 0
for(i = 0; i < 6; i++ ){
        (function (j) {
            setTimeout(function () {
                console.log(j);
            }, 0);
        })(i);
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一、為什么如下代碼會打印出六個6 setTimeout是指過一會兒再執(zhí)行,也就是循環(huán)執(zhí)行完再打印,當循環(huán)6次后,i...
    浪味仙兒啊閱讀 183評論 0 2
  • 1.為什么下面代碼會打印 6 個 6 setTimeout是有延遲的執(zhí)行,雖然設置了0,但是對于計算機的運行速度來...
    wwfstrong閱讀 144評論 0 0
  • 為什么打印出6 個 6? setTimeout 會過一段時間才去執(zhí)行,這時候for已經(jīng)循環(huán)完了所以打出6個6 為什...
    小芬芬007閱讀 173評論 0 0
  • 很多Node.js初學者都會有這樣的疑惑,Node.js到底是單線程的還是多線程的?通過本章的學習,能夠讓讀者較為...
    越努力越幸運_952c閱讀 3,816評論 4 36
  • 執(zhí)行chattr -R -ai /var/spool/cron 原因:cron 默認被鎖定了。防止惡意程序,自動寫任務。
    Grey____閱讀 1,533評論 0 0

友情鏈接更多精彩內(nèi)容