2009-01-19 43 views

回答

436

您需要创建一个匿名函数,以便实际功能不会马上执行。

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

什么应该是动态参数? – rony36 2013-08-22 17:16:45

+21

@ rony36 - 你可能想要一个为你创建间隔计时器的函数。将参数传递给函数,使其值在函数闭包中捕获,并在定时器到期时保留。 `function createInterval(f,dynamicParameter,interval){setInterval(function(){f(dynamicParameter);},interval); }`然后称之为`createInterval(funca,dynamicValue,500);`显然你可以扩展这个参数。请使用更多的描述性变量名称。 :) – tvanfosson 2013-08-22 18:12:44

+2

@tvanfosson - 如何清除这种间隔? – Yong 2016-10-03 06:33:09

34

为参数加入他们的setInterval:

setInterval(funca, 500, 10, 3); 

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

+6

这不适用于Internet Explorer。 – Kev 2009-01-19 14:56:35

+1

Whaa ?!从什么时候开始允许的? (严重问题) – 2009-01-19 15:03:46

+1

不确定。我的来源是:https://developer.mozilla.org/en/DOM/window.setInterval – Kev 2009-01-19 18:18:04

16

您可以使用匿名函数;

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

这工作setInterval("foo(bar)",int,lang); .... 乔恩克莱泽导致我的答案。

29

可以传递参数(S)作为函数对象的属性,而不是作为一个参数:

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”将具有正确的范围。

5

报价参数应该足够:

OK --> reloadIntervalID = window.setInterval("reloadSeries('"+param2Pass+"')" , 5000) 

KO --> reloadIntervalID = window.setInterval("reloadSeries("+param2Pass+")" , 5000) 

注意每个参数的单引号'

与IE8,铬和Firefox

56

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

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

Reference here

12
 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 
0

另一解决方案包括在通过您的功能类似的(如果你有动态变量): setInterval('funca('+ x +','+ y +')',500);

-1

您可以使用名为underscore js的库。它在绑定方法上提供了一个很好的包装,并且也是一种更简洁的语法。让你在指定的范围内执行该函数。

http://underscorejs.org/#bind

_.bind(功能,适用范围,*参数)匿名函数后

10
setInterval(function,milliseconds,param1,param2,...) 
-2

添加parenthesizes似乎这样的伎俩:

function clock() { 
    n = 10; 

    while(--n) { 
     setInterval(function() { 
      console.log(n); 
     }(n), 1000); 
    } 
} 
0

我知道这个话题这么老,但这里是我的解决方案,在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); 
} 
9

到目前为止,最实用的答案是一个由tvanfosson给出的,所有我能做的就是给你一个更新的版本ES6:

setInterval(()=>{ funca(10,3); }, 500);