利用延迟递归解决setinterval时间过长导致页面内存崩溃的
2020-10-29 本文已影响0人
boyiis
利用延迟递归解决setinterval时间过长导致页面内存崩溃的问题
先看解决方案
function hahaha(f, time) {
let timer;
return function walk() {
clearTimeout(timer);
timer = setTimeout(function () {
f();
walk();
}, time);
};
}
hahaha(updateFormat, 1000)();
可能有的同学是考虑的下面的一种方式
function walk(f, time) {
setTimeout(
function() {
f()
walk(f, time)
}, time)
}
walk(updateFormat, 1000)
上面一种方式为啥比下面一种方式好呢?
上面一种方式是个延迟递归,walk(f, time),一段时间后,内部再次调用walk(f, time)。而下面一种方式没有对f,time保存,所以每次调用walk()需要传递参数f, time。而上面一种方式对f, time进行了保存(闭包)