Yanıtlar:
Anonim bir işlev oluşturmanız gerekir, böylece gerçek işlev hemen yürütülmez.
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Sonra olarak adlandırın createInterval(funca,dynamicValue,500);
Açıkçası bunu birden fazla parametre için genişletebilirsiniz. Ve lütfen daha açıklayıcı değişken adları kullanın. :)
funca
?
şimdi ES5 ile, bind yöntemi Fonksiyon prototipi:
setInterval(funca.bind(null,10,3),500);
console.log.bind(null)("Log me")
atacak Illegal invocation
, ancak console.log.bind(console)("Log me")
beklendiği gibi çalışacaktır. Bunun nedeni arg olarak console.log
gerektirir . console
this
SetInterval'a parametre olarak ekleyin:
setInterval(funca, 500, 10, 3);
Sorunuzdaki sözdizimi, önerilen uygulama olmayan eval'i kullanıyor.
Parametreleri parametre olarak değil, fonksiyon nesnesinin bir özelliği olarak iletebilirsiniz:
var f = this.someFunction; //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);
Daha sonra fonksiyonunuzda someFunction
parametrelere erişebilirsiniz. Bu, özellikle kapsamın global alana otomatik olarak girdiği ve setInterval adlı sınıfa başlamak için sınıfta referansları kaybettiğiniz sınıflar içinde faydalıdır. Bu yaklaşımla, yukarıdaki örnekte, "someFunction" içindeki "parametre2" doğru kapsama sahip olacaktır.
setInterval(function(a,b,c){
console.log(a + b +c);
}, 500, 1,2,3);
//note the console will print 6
//here we are passing 1,2,3 for a,b,c arguments
// tested in node v 8.11 and chrome 69
Anonim bir işlev kullanabilirsiniz;
setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)
Güncelleme: 2018 - "spread" operatörünü kullanın
function repeater(param1, param2, param3){
alert(param1);
alert(param2);
alert(param3);
}
let input = [1,2,3];
setInterval(repeater,3000,...input);
Şimdiye kadar en pratik cevap tvanfosson tarafından verilen cevaptır, yapabileceğim tek şey size ES6 ile güncellenmiş bir sürüm vermektir:
setInterval( ()=>{ funca(10,3); }, 500);
Argümanlardan alıntı yapmak yeterli olmalıdır:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
'
Her bir bağımsız değişken için tek tırnak işaretini not edin .
IE8, Chrome ve FireFox ile test edildi
Bu konunun çok eski olduğunu biliyorum ama burada parametreler setInterval
işlevde geçen hakkında benim çözüm .
Html:
var fiveMinutes = 60 * 2;
var display = document.querySelector('#timer');
startTimer(fiveMinutes, display);
JavaScript:
function startTimer(duration, display) {
var timer = duration,
minutes, seconds;
setInterval(function () {
minutes = parseInt(timer / 60, 10);
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
--timer; // put boolean value for minus values.
}, 1000);
}
timer
) sağlar, ama clearInterval()
bu senaryoda nasıl ?
Alt çizgi js adlı bir kitaplık kullanabilirsiniz. Bağlama yönteminde güzel bir sarıcı verir ve aynı zamanda çok daha temiz bir sözdizimidir. İşlevi belirtilen kapsamda yürütmenize izin verir.
_.bind (işlev, kapsam, * bağımsız değişkenler)
Bu sorun, kapakların kullanımı için güzel bir gösteri olacaktır. Fikir, bir fonksiyonun dış kapsam değişkenini kullanmasıdır. İşte bir örnek...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
"MakeClosure" işlevi, "name" dış kapsam değişkenine erişimi olan başka bir işlev döndürür. Yani, temel olarak, "makeClosure" işlevini kullanmak için hangi değişkenleri geçmeniz ve bunları "ret" değişkenine atanmış işlevde kullanmanız gerekir. Etkileyici bir şekilde, setInterval "ret" işlevine atanan işlevi yürütür.
Vue uygulamasıyla aynı sorunu yaşadım. Benim durumumda bu çözüm, anonim işlev mounted ()
yaşam döngüsü kancasındaki bildirimle ilgili olarak ok işlevi olarak bildirilmişse çalışır .
.setInterval(func, delay[, param1, param2, ...]);