Answers:
您需要创建一个匿名函数,以便不会立即执行实际函数。
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
然后将其称为createInterval(funca,dynamicValue,500);
显然,您可以将其扩展为多个参数。并且,请使用更具描述性的变量名。:)
funca
?
console.log.bind(null)("Log me")
将抛出Illegal invocation
,但console.log.bind(console)("Log me")
将按预期工作。这是因为console.log
需要console
作为this
arg。
将它们添加为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的类的引用。通过这种方法,在上面的示例中,“ someFunction”中的“ parameter2”将具有正确的作用域。
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-使用“ spread”运算符
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);
我知道这个主题太老了,但这是我在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方法提供了很好的包装,并且语法也更加简洁。让您在指定范围内执行功能。
_.bind(函数,范围,*参数)
这个问题将是使用闭包的一个很好的示范。这个想法是一个函数使用一个外部作用域的变量。这是一个例子
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
函数“ makeClosure”返回另一个函数,该函数可以访问外部范围变量“名称”。因此,基本上,您需要将任何变量传递给“ makeClosure”函数,并在分配给“ ret”变量的函数中使用它们。因此,setInterval将执行分配给“ ret”的功能。
我在Vue应用程序中遇到了同样的问题。就我而言,这种解决方案仅在匿名函数已声明为箭头函数(关于mounted ()
生命周期挂钩处的声明)的情况下才有效。
.setInterval(func, delay[, param1, param2, ...]);