Javascript 具有自动执行功能的setInterval

Javascript 具有自动执行功能的setInterval,javascript,setinterval,Javascript,Setinterval,我希望第一次立即运行我的函数(无超时),因此我执行以下操作: setInterval(function(){ alert("Boo"); }(), 1000); 函数在第一次执行时,但在接下来的时间间隔内,什么也没有发生。为什么?更好的问题是,你到底想要实现什么 您不会从自调用函数中返回任何内容,因此它将隐式返回未定义的值,该值将传递给setTimeout。在第一次呼叫之后,线路看起来像 setInterval(undefined, 1000); 显然,这毫无意义,也不会继续打电话

我希望第一次立即运行我的函数(无超时),因此我执行以下操作:

setInterval(function(){
    alert("Boo");
}(), 1000);

函数在第一次执行时,但在接下来的时间间隔内,什么也没有发生。为什么?

更好的问题是,你到底想要实现什么

您不会从自调用函数中
返回任何内容,因此它将隐式返回
未定义的
值,该值将传递给
setTimeout
。在第一次呼叫之后,线路看起来像

setInterval(undefined, 1000); 
显然,这毫无意义,也不会继续打电话给任何人

您需要从自调用函数中返回另一个函数,或者不使用自调用函数,只传递函数引用


更新:

你更新了你的问题。如果您想在init上运行一个函数“一次”,然后在间隔中使用它,您可以执行以下操作

setInterval((function() {
    function loop() {
        alert('Boo');
    };

    loop();
    return loop;
}()), 1000);

Set interval需要函数引用,而不是从函数返回的未定义的引用。只需删除匿名函数末尾的“()”。

因为
setInterval
“看到的”是自执行函数的返回值-
未定义的

请尝试以下方法:

    setInterval(function()
        {
             alert("Boo");
             return arguments.callee;

        }(), 1000);
注:

正如我所指出的,
参数。被调用方在中是不允许的。

您的自执行函数不会返回一个函数作为
setInterval
的参数,因此它在调用
setInterval
之前显示警报,而
setInterval
基本上是不可操作的


如果您愿意,您可以看到Firefox抱怨对
setInterval
的空调用。

您可以这样写:

setInterval((function() {
    function boo() {
        alert("boo");
    };
    boo();
    return boo;
})(), 1000);​

但我建议您在区间之外声明函数

这是因为它是被调用的,而不是被传递的。如果需要立即调用,只需给它一个名称,然后返回它

setInterval(function foo() { 
    alert("boo"); 
    return foo; 
}(), 1000);
这称为命名函数表达式。您应该知道,在大多数浏览器中,
foo
标识符只在
foo
内部可用,但较旧的IE存在导致标识符泄漏到外部范围的问题


这通常不是一个问题,但在选择函数名时应该注意这一点。

以下是我过去的做法:

(function loop () {
   // do stuff
   window.setTimeout(loop, 1000);
})();

setInterval
函数
作为参数。您正在传入未定义的
。(因为在自执行函数中没有返回任何内容)这是因为它是被调用的,而不是被传递的。如果需要立即调用,只需给它一个名称,然后返回它<代码>设置间隔(函数foo(){alert(“boo”);返回foo;}(),1000)@IHateLazy,你能把这个作为答案吗?@AfshinMehrabani:jHummel似乎知道提问者到底想要什么对不起,解释得不好,请再看一遍问题。你是对的。对不起,我的解释不好,请再次查看问题。但应该注意,
参数。被调用方
在严格模式下是不允许的。实际上,您可以命名自执行函数,因此不需要在函数中使用函数--请参阅我的回答此方法也是设置间隔的更好方法,因为它可以防止在每个时间范围内触发函数不止一次。