Javascript 我还可以使用什么来代替参数。callee?
我试图将这个块重构成一个函数Javascript 我还可以使用什么来代替参数。callee?,javascript,Javascript,我试图将这个块重构成一个函数 function runProcess(){ var todo = items.concat(); setTimeout(function(){ process(todo.shift()); if(todo.length > 0){ setTimeout(arguments.callee, 25); } else { callback(items);
function runProcess(){
var todo = items.concat();
setTimeout(function(){
process(todo.shift());
if(todo.length > 0){
setTimeout(arguments.callee, 25);
} else {
callback(items);
}
}, 25);
}
但这次给定的数组从一开始就重复它自己
我认为问题出现在参数中。被调用方,那么我可以用什么来代替它呢?
致以最诚挚的问候功能
setInterval
应满足您的需要
function doWork(todo){
process(todo.shift());
if(todo.length > 0){
setTimeout(arguments.callee, 25);
} else {
callback(items);
}
}
只需为您的匿名函数指定一个名称,以便您可以按其名称调用它
function runProcess(){
var todo = items.concat(),
id = setInterval(function(){
process(todo.shift());
if(todo.length === 0) {
clearInterval(id);
callback(items);
}
}, 25);
}
你认为“待办事项”的长度会发生怎样的变化?“回调”有什么作用?@chaospandio我错过了“shift”调用。@Pointy-Wow我对键入上一条评论感到很遗憾,删除…可能重复的这条评论不是一个坏的选择,但我认为并非所有实现都支持它(不要引用我…。@chaospandio:它有效,在IE中有一个副作用:
“step”
将被引入本地作用域。谢谢,如果函数步骤有参数,还有一件事我如何更改?@Myra您的意思是设置超时(函数(){step(arg1,arg2,ar3);},25)代码>?但是我看不出有什么意义,因为由于闭包的原因,step
将知道与runProcess
完全相同的事情。@在哪个实现中不支持为函数命名?这是胡说八道。对不起。:)
function runProcess(){
var todo = items.concat();
setTimeout(function step() { // give it a name
process(todo.shift());
if(todo.length > 0){
setTimeout(step, 25); // call it by its name
} else {
callback(items);
}
}, 25);
}