javascript中setInterval函数的闭包

Closure for setInterval function in javascript

本文关键字:闭包 函数 setInterval javascript      更新时间:2023-09-26

如何在不使用全局变量的情况下使用setInterval?我更喜欢将setInerval调用的函数的所有变量封装在某种闭包中,比如:

var wrap = function (f){
 var local1, local2, ...;
 return function () { return f(); }
}

这不起作用,但我的想法是将wrap(f)而不是f传递给setInterval,这样f的局部就可以很好地封装起来,不会污染全局范围。

javascript没有动态绑定。(除此关键字外)

使用匿名功能可以存档您的想法。(称为关闭)

var fnc = function(){
    var local1, local2;
    return function(){
         // using local1, local2
    }
};
setInterval(fnc, 1000);

我想你正在寻找这样的东西。。。

var wrap = function (f){
    var locals = Array.prototype.slice.call(arguments, 1);
    return function () { f.apply(this, locals); }
};

function logger_func() {
    console.log.apply(console, arguments);
}
for (var i = 0; i < 10; i++) {
    setTimeout( wrap(logger_func, i, "foo_" + i), // <-- wrapping i
                i * 1000 );
}

请注意,现代环境允许您向setTimeout传递额外的参数。。。

for (var i = 0; i < 10; i++) {
    setTimeout(logger_func, i * 1000, i, "foo_" + i);
}