Передать параметры в функции setInterval

Как передать параметр при вызове функции с помощью setInterval. именно. setInterval('funca(10,3)',500); некорректно.

13 ответов


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

setInterval( function() { funca(10,3); }, 500 );

теперь с ES5, прототип функции метода bind:

setInterval(funca.bind(null,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. При таком подходе " parameter2 "в" someFunction", в приведенном выше примере, будет иметь правильную область.


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

setInterval(function() { funca(10,3); },500);

     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,milliseconds,param1,param2,...)

на сегодняшний день наиболее практичным ответом является тот, который дал 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("foo(bar)",int,lang);.... Джон Клейзер привести меня к ответу.


другое решение состоит в том, чтобы передать вашу функцию так (если у вас есть dynamics vars) : setInterval ('funca ('+x+', ' +y+')',500);


вы можете использовать библиотеку под названием underscore js. Он дает хорошую обертку для метода bind и является гораздо более чистым синтаксисом. Позволяет выполнять функцию в указанной области.

http://underscorejs.org/#bind

_.bind (функция, область, *аргументы)