setInterval
不使用全局变量如何使用?我更愿意将 setInerval 调用的函数的所有变量包装在某种闭包中,如下所示:
var wrap = function (f){
var local1, local2, ...;
return function () { return f(); }
}
这不起作用,但我的想法是我会通过wrap(f)
而不是f
to setInterval
,以便本地人f
被很好地包装并且不会污染全局范围。
setInterval
不使用全局变量如何使用?我更愿意将 setInerval 调用的函数的所有变量包装在某种闭包中,如下所示:
var wrap = function (f){
var local1, local2, ...;
return function () { return f(); }
}
这不起作用,但我的想法是我会通过wrap(f)
而不是f
to 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);
}