簡體   English   中英

在javascript中關閉setInterval函數

[英]Closure for setInterval function in javascript

如何在不使用全局變量的情況下使用setInterval 我更喜歡將setInerval調用的函數的所有變量包裝在某種閉包中,如下所示:

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

這不起作用,但我的想法是我將wrap(f)而不是f傳遞給setInterval ,因此f locals很好地包裝並且不會污染全局范圍。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM