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


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

13 273

13 ответов:

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

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

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

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);.... Джон Клейзер привести меня к ответу.

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

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

http://underscorejs.org/#bind

_.привязать(функция, сфера применения, *рассуждения)