setInterval関数でパラメーターを渡す
-
19-08-2019 - |
質問
setInterval
を使用して呼び出される関数にパラメーターを渡す方法をアドバイスしてください。
私の例setInterval(funca(10,3), 500);
は間違っています。
解決
実際の関数がすぐに実行されないように、匿名関数を作成する必要があります。
setInterval( function() { funca(10,3); }, 500 );
他のヒント
これらをパラメーターとしてsetIntervalに追加します:
setInterval(funca, 500, 10, 3);
質問の構文はevalを使用していますが、これは推奨されない方法です。
パラメーターとしてではなく、関数オブジェクトのプロパティとしてパラメーターを渡すことができます:
var f = this.someFunction; //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);
その後、関数someFunction
で、パラメーターにアクセスできます。これは、スコープが自動的にグローバルスペースに移動し、最初にsetIntervalを呼び出したクラスへの参照が失われるクラス内で特に役立ちます。このアプローチでは、<!> quot; parameter2 <!> quot;上記の例の<!> quot; someFunction <!> quot;のスコープは適切です。
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
匿名関数を使用できます;
setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)
更新:2018-<!> quot; spread <!> quot;を使用します演算子
function repeater(param1, param2, param3){
alert(param1);
alert(param2);
alert(param3);
}
let input = [1,2,3];
setInterval(repeater,3000,...input);
最も実用的な答えはtvanfossonによるものです。ES6で更新されたバージョンを提供するだけです:
setInterval( ()=>{ funca(10,3); }, 500);
引数を引用するだけで十分です:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
各引数の単一引用符'
に注意してください。
IE8、Chrome、FireFoxでテスト済み
このトピックは非常に古いことは知っていますが、setInterval
関数でパラメーターを渡すことに関するソリューションです。
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);
}
これは動作しますsetInterval("foo(bar)",int,lang);
.... Jon Kleiser が答えを導きます。
別の解決策は、そのような関数を渡すことです(ダイナミクス変数を持っている場合): setInterval( 'funca(' + x + '、' + y + ')'、500);
アンダースコアjsというライブラリを使用できます。 bindメソッドの優れたラッパーを提供し、はるかにきれいな構文でもあります。指定したスコープで関数を実行できます。
_。bind(function、scope、* arguments)
この問題は、クロージャーの使用の良いデモンストレーションです。関数は、外部スコープの変数を使用するという考え方です。以下に例を示します...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
関数<!> quot; makeClosure <!> quot;外部スコープ変数<!> quot; name <!> quot;にアクセスできる別の関数を返します。そのため、基本的には、変数を<!> quot; makeClosure <!> quot;に渡す必要があります。 <!> quot; ret <!> quot;に割り当てられた関数で使用します。変数。効果的に、setIntervalは<!> quot; ret <!> quot;に割り当てられた関数を実行します。