var td = {
setTimeout: function(callback, ms){
var dt = new Date();
var i = dt.getTime(), future = i+ms;
while(i<=future){
if(i === future){
callback();
}
// i = dt.getTime();
i++;
}
}
};
td.setTimeout(function(){
console.log("Hello"); // executes immediately
}, 3000);
這種方法的問題是,在同時塊我的i
值設置爲i + 1
我認爲結束時,應設置爲當前時間戳(dt.getTime()
)那麼,future
(回調函數應該執行的時間戳值)可以與當前時間戳進行比較,該值是i
的值。創建自定義的setTimeout()函數
但是,當我註釋掉i++
並取消這一行:
I = dt.getTime();
並運行腳本,瀏覽器凍結。有沒有辦法創建一個setTimout()
方法,可以達到與window.setTimeout()
相同的目的?
它是不是真的可以模擬'setTimeout'用戶代碼的土地,因爲JavaScript不公開任何API直接函數添加到事件隊列。反正...什麼實際上是你的問題? –
你應該明白,即使你修復了無限循環問題,眉毛ser仍然會鎖定。這是因爲循環會阻止任何其他內容被執行,直到它終止。 –
看看[**這個答案**](https://stackoverflow.com/a/41814108/6647153)或多或少的類似問題。 –