你可以放一个包装setTimeout
- 我只是把这个放在一起(经过几次测试迭代......)
(function() {
var cache = {};
var _setTimeout = window.setTimeout;
var _clearTimeout = window.clearTimeout;
window.setTimeout = function(fn, delay) {
var id = _setTimeout(function() {
delete cache[id]; // ensure the map is cleared up on completion
fn();
}, delay);
cache[id] = fn;
return id;
}
window.clearTimeout = function(id) {
delete cache[id];
_clearTimeout(id);
}
window.getTimeout = function(id) {
return cache[id];
}
})();
注意:如果您使用字符串作为回调,这将不起作用。但是没有人这样做,他们..?
它也不支持将 ES5 附加参数传递给回调函数,尽管这很容易支持。