Ответы:
Вам необходимо создать анонимную функцию, чтобы фактическая функция не выполнялась сразу.
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Затем назовите это как createInterval(funca,dynamicValue,500);
Очевидно, вы можете расширить это для более чем одного параметра. И, пожалуйста, используйте более описательные имена переменных. :)
funca
?
теперь с ES5, метод связывания Прототип функции:
setInterval(funca.bind(null,10,3),500);
console.log.bind(null)("Log me")
скину Illegal invocation
, но console.log.bind(console)("Log me")
будет работать как положено. Это потому, что console.log
требует console
в качестве this
аргумента.
Добавьте их в качестве параметров в 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(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 - используйте оператор "распространение"
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);
}
timer
), но как вы clearInterval()
в этом сценарии?
Вы можете использовать библиотеку с именем underscore js. Он дает хорошую обертку для метода bind, а также намного более чистый синтаксис. Позволяет вам выполнить функцию в указанной области.
_.bind (функция, область действия, * аргументы)
Эта проблема была бы хорошей демонстрацией использования крышек. Идея состоит в том, что функция использует переменную внешней области видимости. Вот пример ...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
Функция «makeClosure» возвращает другую функцию, которая имеет доступ к внешней области видимости переменной «name». Таким образом, в основном вам нужно передать любые переменные в функцию «makeClosure» и использовать их в функции, назначенной переменной «ret». В результате setInterval выполнит функцию, назначенную «ret».
У меня была такая же проблема с приложением Vue. В моем случае это решение работает только в том случае, если анонимная функция объявлена как функция стрелки, в отношении объявления на mounted ()
хуке жизненного цикла.
.setInterval(func, delay[, param1, param2, ...]);