在setInterval函数中传递参数

如何使用setInterval调用函数时传递参数。 即 setInterval('funca(10,3)',500); 是不正确的。

您需要创build一个匿名函数,以便实际的函数不会立即执行。

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

现在用ES5,绑定方法函数原型:

 setInterval(funca.bind(null,10,3),500); 

在这里引用

将它们作为参数添加到setInterval:

 setInterval(funca, 500, 10, 3); 

在你的问题语法使用eval,这是不推荐的做法。

您可以将参数作为函数对象的属性传递,而不是作为parameter passing:

 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() { funca(10,3); },500); 
  setInterval(function(a,b,c){ console.log(a + b +c); }, 500, [1],[2],[3]); //note the console will not print 6 // rather it will print 123 in every 500 ms // because arguments are passed as array not as numbers // tested in node.js ie 11 and chrome 
 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) 

注意每个参数的单引号。

testing了IE8,Chrome和FireFox

这个工作setInterval("foo(bar)",int,lang); Jon Kleiser带领我回答。

另一个解决scheme就是传递你的函数(如果你有dynamicvariables):setInterval('funca('+ x +','+ y +')',500);

您可以使用名为下划线js的库。 它给绑定方法提供了一个很好的包装,也是一个更清晰的语法。 让你在指定的范围内执行函数。

http://underscorejs.org/#bind

_.bind(函数,范围,*参数)

我知道这个话题是如此古老,但这里是我在setInterval函数中传递参数的解决scheme。

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); } 

在匿名函数后添加括号似乎可以做到这一点:

 function clock() { n = 10; while(--n) { setInterval(function() { console.log(n); }(n), 1000); } }