在JS中调用自执行匿名父函数

时间:2011-09-09 15:27:29

标签: javascript

给出以下代码

(function(){console.log("ello");setTimeout("**CALL PARENT FUNCTION**",100);}())

如何在每个X持续时间内调用此匿名父函数。

4 个答案:

答案 0 :(得分:4)

使用arguments对象上的callee attribute

(function(){console.log("ello");setTimeout(arguments.callee,100);})()

但是,建议MDC网站:

  

注意:你应该避免使用arguments.callee()并给每个函数(表达式)命名。

答案 1 :(得分:3)

可以将当前函数称为arguments.callee。但是,这在ECMAScript 5的严格模式中是禁止的,将在以后的版本中删除。无论如何你打算使用它,它看起来像这样:

(function(){console.log("ello");setTimeout(arguments.callee, 100);}())

相反,您应该只为函数命名。因为您将该函数用作表达式,所以其他人不会看到该名称,您只是给它一个引用自身的方法。这是Mozilla's JavaScript docs for arguments.callee中提出的建议:

  

注意:您应该避免使用arguments.callee(),只需为每个函数(表达式)命名。

这比使用arguments.callee简单且简短:

(function f(){console.log("ello");setTimeout(f, 100);}())

答案 2 :(得分:1)

您可能希望实现递归。

你可以看一下:

http://www.devhands.com/2009/06/javascript-recursive-settimeout/

特别是关于:

的部分
function(){
    var t_count = 0;
    (function(delay, count) {
        setTimeout(function() {
            if (count && ++t_count > count) return;
            // do your stuff here
            setTimeout(arguments.callee, delay);
        }, delay);
    })(200, 10);
}

更新: 确实,arguments.calee在javascript中被弃用了,SO Thread在这里讨论它:Why was the arguments.callee.caller property deprecated in JavaScript?,这里有另一个线程讨论如何stop settimeout in recursive function确实有你想要的信息。

答案 3 :(得分:1)

尝试arguments.callee

console.log("ello"); setTimeout(arguments.callee,100);