當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript关于setTimeout的面试题
生活随笔
收集整理的這篇文章主要介紹了
javascript关于setTimeout的面试题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
for (var i = 0; i <5; i++) { // 每一次for循環(huán)的時候,setTimeout是立即執(zhí)行的,但是里面的回調(diào)函數(shù)沒有被執(zhí)行,回調(diào)函數(shù)是異步的,會被放到了任務隊列里面setTimeout(function() {console.log(i); // 執(zhí)行此代碼時,同步代碼for循環(huán)已經(jīng)執(zhí)行完成}, 0);
}
// 輸出結果: 5 5 5 5 5// 該問題有多種解決方案
// 方案一: 將var改為let
// i雖然在全局作用域聲明,但是在for循環(huán)體塊級作用域中使用的時候,變量會被固定,不受當前塊級作用域以外的干擾。
for (let i = 0; i < 5; i++) { setTimeout(function() {console.log(i); // i 是循環(huán)體內(nèi)局部作用域,不受外界影響。}, 0);
}
// 輸出結果: 0 1 2 3 4// 方案二: 利用閉包
for (var i = 0; i < 5; i++) {(function (j) { // 此處傳入的j是匿名函數(shù)傳入的參數(shù)setTimeout(function () {console.log(j);}, 0);})(i) // 每次傳入的參數(shù)是從for循環(huán)里面取到的值
}
// 輸出結果: 0 1 2 3 4// 方案三: 利用setTimeout第三個(及以上)參數(shù)
for (var i = 0; i < 5; i++) {// 第三個以后的參數(shù)是作為回調(diào)函數(shù)的參數(shù)傳進去setTimeout(function (k) {console.log(k);}, 0, i); // 每次傳入的參數(shù)是從for循環(huán)里面取到的值
}
// 輸出結果: 0 1 2 3 4
前端菜鳥,如果有錯誤之處請指出
總結
以上是生活随笔為你收集整理的javascript关于setTimeout的面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日语中的不好意思、对不起是怎么表达的呀-
- 下一篇: nodeJS入门——新建一个项目及代码详