这是一个异步的处理加闭包的问题,setTimeout或者setInterval不可避免 方案1async/await Promise setTimeout while
代码语言:javascript复制 function repeat(fn, num, delay) {
return async function (str) {
while (num) {
await new Promise(res => {
setTimeout(function () {
fn(str);
num--;
res()
}, delay)
})
}
}
}
var repeatFunc=repeat(console.log,4,3000);
repeatFunc('hellow world')
方案2 setnterval clearInterval
代码语言:javascript复制 function repeat(fn, num, delay) {
return function (str) {
var timer=setInterval(function (params) {
fn(str);
num--;
if(num===0){
clearInterval(timer)
}
},delay)
}
}
var repeatFunc=repeat(console.log,4,3000);
repeatFunc('hellow world')
方案3 setTimeout fn
代码语言:javascript复制 function repeat(fn, num, delay) {
return function (str) {
function parint() {
setTimeout(function () {
fn(str);
num--;
if (num > 0) {
parint();
}
}, delay)
}
parint()
}
}
var repeatFunc = repeat(console.log, 4, 3000);
repeatFunc('hellow world')
方案4 setTimeout for未考虑执行时间,不严谨
代码语言:javascript复制 function repeat(fn, num, delay) {
return function (str) {
var j = 1;
for (let i=1;i<= num;i ) {
setTimeout(function (params) {
fn(str)
}, delay * i)
}
}
}
var repeatFunc = repeat(console.log, 4, 3000);
repeatFunc('hellow world')