Передать параметры в функцию setInterval - PullRequest
292 голосов
/ 19 января 2009

Посоветуйте, пожалуйста, как передать параметры в функцию, вызываемую с помощью setInterval.

Мой пример setInterval(funca(10,3), 500); неверен.

Ответы [ 14 ]

503 голосов
/ 19 января 2009

Вам необходимо создать анонимную функцию, чтобы фактическая функция не выполнялась сразу.

setInterval( function() { funca(10,3); }, 500 );
70 голосов
/ 01 октября 2012

теперь с ES5, метод связывания Прототип функции:

setInterval(funca.bind(null,10,3),500);

Ссылка здесь

51 голосов
/ 19 января 2009

Добавьте их в качестве параметров для setInterval:

setInterval(funca, 500, 10, 3);

Синтаксис в вашем вопросе использует eval, что не рекомендуется.

30 голосов
/ 14 декабря 2011

Параметр (ы) можно передавать как свойство объекта функции, а не как параметр:

var f = this.someFunction;  //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);

Тогда в вашей функции someFunction у вас будет доступ к параметрам. Это особенно полезно внутри классов, где область действия автоматически переходит в глобальное пространство, и вы теряете ссылки на класс, который вызвал setInterval для начала. При таком подходе «параметр2» в «someFunction» в приведенном выше примере будет иметь правильную область действия.

17 голосов
/ 19 января 2009

Вы можете использовать анонимную функцию;

setInterval(function() { funca(10,3); },500);
16 голосов
/ 10 января 2014
     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
14 голосов
/ 14 июля 2015
setInterval(function,milliseconds,param1,param2,...)

Обновление: 2018 - использовать оператор "распространения"

function repeater(param1, param2, param3){
   alert(param1);
   alert(param2);
   alert(param3); 
}

let input = [1,2,3];
setInterval(repeater,3000,...input);
11 голосов
/ 02 июля 2016

Наиболее практичным ответом является ответ от tvanfosson, все, что я могу сделать, это дать вам обновленную версию с ES6:

setInterval( ()=>{ funca(10,3); }, 500);
6 голосов
/ 25 января 2012

Цитировать аргументы должно быть достаточно:

OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)

KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)

Обратите внимание на одинарные кавычки ' для каждого аргумента.

Протестировано с IE8, Chrome и FireFox

1 голос
/ 02 июля 2016

Я знаю, что эта тема настолько старая, но вот мое решение о передаче параметров в функцию 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);
}
...