请告知如何将参数传递给使用setInterval
调用的函数。
我的示例setInterval(funca(10,3), 500);
不正确。
答案 0 :(得分:501)
您需要创建一个匿名函数,以便不立即执行实际函数。
setInterval( function() { funca(10,3); }, 500 );
答案 1 :(得分:70)
答案 2 :(得分:51)
将它们作为参数添加到setInterval:
setInterval(funca, 500, 10, 3);
您问题中的语法使用eval,这是不推荐的做法。
答案 3 :(得分:30)
您可以将参数作为函数对象的属性传递,而不是参数:
var f = this.someFunction; //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);
然后在您的函数someFunction
中,您将可以访问这些参数。这在范围自动转到全局空间的类中尤其有用,并且您将失去对以setInterval开头的类的引用。使用这种方法,在上面的示例中,“someFunction”中的“parameter2”将具有正确的范围。
答案 4 :(得分:17)
您可以使用匿名函数;
setInterval(function() { funca(10,3); },500);
答案 5 :(得分:16)
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
答案 6 :(得分:14)
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);
答案 7 :(得分:11)
到目前为止,最实用的答案是tvanfosson给出的答案,我能做的就是给你一个ES6的更新版本:
setInterval( ()=>{ funca(10,3); }, 500);
答案 8 :(得分:6)
引用参数应该足够了:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
请注意每个参数的单引号'
。
使用IE8,Chrome和FireFox测试
答案 9 :(得分:1)
这个答案的最佳解决方案是下一个代码块:
setInterval(() => yourFunction(param1, param2), 1000);
答案 10 :(得分:1)
const designated = "1 jan 2021"
function countdown(designated_time){
const currentTime = new Date();
const future_time = new Date(designated_time);
console.log(future_time - currentTime);
}
countdown(designated);
setInterval(countdown, 1000, designated);
有很多方法可以做到这一点,我个人认为这是干净而甜蜜的。
答案 11 :(得分:1)
我知道这个话题太旧了,但这是我在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);
}
答案 12 :(得分:0)
您可以使用名为underscore js的库。它为bind方法提供了一个很好的包装器,也是一个更清晰的语法。让你执行指定范围内的函数。
_.bind(function,scope,* arguments)
答案 13 :(得分:0)
该问题将是使用闭包的一个很好的示范。这个想法是一个函数使用一个外部作用域的变量。这是一个例子...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
函数“ makeClosure”返回另一个函数,该函数可以访问外部作用域变量“名称”。因此,基本上,您需要将任何变量传递给“ makeClosure”函数,并在分配给“ ret”变量的函数中使用它们。因此,setInterval将执行分配给“ ret”的功能。
答案 14 :(得分:0)
我在Vue应用程序中遇到了同样的问题。就我而言,这种解决方案仅在匿名函数已声明为箭头函数(关于mounted ()
生命周期挂钩处的声明)下才有效。
答案 15 :(得分:0)
此外,在IE支持> 9的情况下,您可以在函数设置的内部间隔中传递更多变量。例如:
function myFunc(arg1, arg2){};
setInterval(myFunc, 500, arg1, arg2);
问候!
答案 16 :(得分:0)
另一种解决方案在于传递你的功能(如果你有动态变量): 的setInterval( 'FuncA的行(' + X + ' '+ Y +')',500);
答案 17 :(得分:0)
这有效setInterval("foo(bar)",int,lang);
.... Jon Kleiser 引导我回答。