我已经制作了这段代码:
window.setInterval(function(){ var a = doStuff(); var b = a + 5; }, 60000)
匿名函数的实际内容当然只适用于这个小例子,因为它无关紧要。真正发生的是在函数本身的范围内创建了一堆变量,因为我不需要/想要污染全局空间。
但是众所周知,doStuff()函数直到页面中的60秒才会被调用。我也想在页面加载后立即调用该函数,从那时起每隔60秒调用一次。
是否有可能在setInterval()行之后调用函数而不复制/粘贴内部代码?正如我所说,我不想用函数外部不需要的无用变量来污染全局空间。
答案 0 :(得分:16)
您可以将回调函数放在变量中,并将所有内容包装在自调用匿名函数中:
(function () {
var callback = function() {
var a = doStuff();
var b = a + 5;
};
callback();
window.setInterval(callback, 60000);
})();
没有污染。
答案 1 :(得分:5)
这也可以不创建全局变量:
setInterval((function fn() {
console.log('foo'); // Your code goes here
return fn;
})(), 5000);
实际上,这样就根本不会创建任何变量。
但是,在Internet Explorer中,fn
函数将可从周围范围访问(由于错误)。如果您不希望发生这种情况,只需将所有内容包装在一个自动调用的匿名函数中:
(function() {
setInterval((function fn() {
console.log('foo'); // Your code goes here
return fn;
})(), 5000);
})();
感谢保罗爱尔兰人sharing this trick。
修改:通过bobince回复了一些更多信息。
答案 2 :(得分:0)
又一个解决方案:
(function() {
var a = doStuff();
var b = a + 5;
window.setTimeout(arguments.callee, 60000);
})();
这使用超时而不是间隔,以便它可以在第一次运行,然后在超时后再次运行它。