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);
}