Antworten:
Sie müssen eine anonyme Funktion erstellen, damit die eigentliche Funktion nicht sofort ausgeführt wird.
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Nennen Sie es dann als createInterval(funca,dynamicValue,500);
Offensichtlich können Sie dies für mehr als einen Parameter erweitern. Verwenden Sie bitte aussagekräftigere Variablennamen. :)
funca
?
jetzt mit ES5, Bindungsmethode Funktionsprototyp:
setInterval(funca.bind(null,10,3),500);
console.log.bind(null)("Log me")
wird werfen Illegal invocation
, aber console.log.bind(console)("Log me")
wird wie erwartet funktionieren. Dies liegt daran, console.log
dass console
als this
Argument erforderlich ist .
Fügen Sie sie als Parameter zu setInterval hinzu:
setInterval(funca, 500, 10, 3);
Die Syntax in Ihrer Frage verwendet eval, was nicht empfohlen wird.
Sie können die Parameter als Eigenschaft des Funktionsobjekts und nicht als Parameter übergeben:
var f = this.someFunction; //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);
Dann haben Sie in Ihrer Funktion someFunction
Zugriff auf die Parameter. Dies ist besonders nützlich in Klassen, in denen der Bereich automatisch in den globalen Bereich verschoben wird und Sie Verweise auf die Klasse verlieren, die zunächst setInterval aufgerufen hat. Bei diesem Ansatz hat "parameter2" in "someFunction" im obigen Beispiel den richtigen Gültigkeitsbereich.
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
Sie können eine anonyme Funktion verwenden.
setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)
Update: 2018 - Verwenden Sie den Operator "Spread"
function repeater(param1, param2, param3){
alert(param1);
alert(param2);
alert(param3);
}
let input = [1,2,3];
setInterval(repeater,3000,...input);
Die mit Abstand praktischste Antwort ist die von tvanfosson. Ich kann Ihnen nur eine aktualisierte Version mit ES6 geben:
setInterval( ()=>{ funca(10,3); }, 500);
Das Zitieren der Argumente sollte ausreichen:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
Beachten Sie das einfache Anführungszeichen '
für jedes Argument.
Getestet mit IE8, Chrome und FireFox
Ich weiß, dass dieses Thema so alt ist, aber hier ist meine Lösung zum Übergeben von Parametern in der setInterval
Funktion.
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
), aber wie geht es Ihnen clearInterval()
in diesem Szenario?
Sie können eine Bibliothek namens Unterstrich js verwenden. Es gibt einen schönen Wrapper für die Bindemethode und ist auch eine viel sauberere Syntax. Damit können Sie die Funktion im angegebenen Bereich ausführen.
_.bind (Funktion, Umfang, * Argumente)
Dieses Problem wäre eine schöne Demonstration für die Verwendung von Verschlüssen. Die Idee ist, dass eine Funktion eine Variable des äußeren Bereichs verwendet. Hier ist ein Beispiel...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
Die Funktion "makeClosure" gibt eine andere Funktion zurück, die Zugriff auf die äußere Bereichsvariable "name" hat. Grundsätzlich müssen Sie also alle Variablen an die Funktion "makeClosure" übergeben und sie in der Funktion verwenden, die der Variablen "ret" zugewiesen ist. Bezeichnenderweise führt setInterval die Funktion aus, die "ret" zugewiesen ist.
Ich hatte das gleiche Problem mit der Vue-App. In meinem Fall funktioniert diese Lösung nur, wenn die anonyme Funktion als Pfeilfunktion deklariert wurde, was die Deklaration am mounted ()
Life Circle Hook betrifft.
.setInterval(func, delay[, param1, param2, ...]);