给出以下代码
(function(){console.log("ello");setTimeout("**CALL PARENT FUNCTION**",100);}())
如何在每个X持续时间内调用此匿名父函数。
答案 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);