Closure for setInterval function in javascript

一个人想着一个人 提交于 2019-12-19 09:54:14

问题


How to use setInterval without using global variables? I'd prefer to wrap all variables of function invoked by setInerval in some kind of closure, like so:

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

This doesn't work, but the idea is that I'd pass wrap(f) instead of f to setInterval, so that locals for f are nicely wrapped and don't pollute the global scope.


回答1:


javascript don't have dynamic binding.(except this keyword)

use anonymous function can archive your idea. (it called closure)

var fnc = function(){
    var local1, local2;

    return function(){
         // using local1, local2
    }
};

setInterval(fnc, 1000);



回答2:


I assume you're looking for something like this...

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 );
}

Note that modern environments let you pass extra arguments to setTimeout...

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


来源:https://stackoverflow.com/questions/11800436/closure-for-setinterval-function-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!