我做了这个代码:
window.setInterval(function(){ var a = doStuff(); var b = a + 5; }, 60000)
Run Code Online (Sandbox Code Playgroud)
匿名函数的实际内容当然仅适用于这个小例子,因为它无关紧要.真正发生的是在函数本身的范围内创建了一堆变量,因为我不需要/想要污染全局空间.
但是众所周知,doStuff()函数直到页面中的60秒才会被调用.我还想在页面加载后立即调用该函数,从那时起每隔60秒调用一次.
是否有可能在没有将内部代码复制/粘贴到setInterval()行之后调用该函数?正如我所说,我不想用函数外部不需要的无用变量来污染全局空间.
Dan*_*llo 16
您可以将回调函数放在变量中,并将所有内容包装在自调用匿名函数中:
(function () {
var callback = function() {
var a = doStuff();
var b = a + 5;
};
callback();
window.setInterval(callback, 60000);
})();
Run Code Online (Sandbox Code Playgroud)
没有污染.
这也可以在不创建全局变量的情况下实现:
setInterval((function fn() {
console.log('foo'); // Your code goes here
return fn;
})(), 5000);
Run Code Online (Sandbox Code Playgroud)
实际上,通过这种方式,您根本不会创建任何变量.
但是,在Internet Explorer中,fn可以从周围的范围访问该功能(由于错误).如果您不希望发生这种情况,只需将所有内容包装在一个自动调用的匿名函数中:
(function() {
setInterval((function fn() {
console.log('foo'); // Your code goes here
return fn;
})(), 5000);
})();
Run Code Online (Sandbox Code Playgroud)
感谢Paul Irish 分享这个技巧.
编辑:答案更新了更多信息,感谢bobince.