Відповіді:
Вам потрібно створити анонімну функцію, щоб фактична функція не виконувалася відразу.
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 для початку. При такому підході "параметр2" у "деякійФункції", у наведеному вище прикладі, матиме правильну область застосування.
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()
у цьому сценарії?
Ви можете використовувати бібліотеку під назвою підкреслення js. Це дає гарну обгортку методом прив’язки, а також є набагато чистішим синтаксисом. Дозволяє виконувати функцію у вказаному обсязі.
_.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, ...]);