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)或多或少的类似问题。 –