在 setInterval 函数中传递参数

IT技术 javascript parameters setinterval
2021-01-12 09:32:13

请告知如何将参数传递到名为 using 的函数中setInterval

我的例子setInterval(funca(10,3), 500);是不正确的。

6个回答

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

setInterval( function() { funca(10,3); }, 500 );
这对我有用,但为什么会这样?
2021-03-12 09:32:13
动态参数应该是什么?
2021-03-19 09:32:13
@rony36 - 您可能想要一个为您创建间隔计时器的函数。将参数传递给函数,以便它的值在函数闭包中被捕获并在计时器到期时保留。function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }然后将其称为createInterval(funca,dynamicValue,500); 显然您可以将其扩展为多个参数。并且,请使用更具描述性的变量名称。:)
2021-03-26 09:32:13
@tvanfosson 谢谢。我的错,但我实际上是指您在评论部分给出的 createInterval 示例。它将如何工作?我也在考虑将计时器变量作为动态参数传递,但不确定如何或是否有意义。为了清楚起见,我在这里添加了一个新问题:stackoverflow.com/questions/40414792/...
2021-03-28 09:32:13
@tvanfosson:很棒的答案!你知道如何清除函数的区间形式funca吗?
2021-03-30 09:32:13

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

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

参考这里

到目前为止最好的答案。干净整洁。非常感谢!
2021-03-13 09:32:13
只需添加适用于 Chrome>=7、Firefox>=4.0、Explorer>=9、Opera>=11.60、Safari>=5.1(来源:developer.mozilla.org/ca/docs/Web/JavaScript/Reference/...
2021-04-01 09:32:13
@RogerVeciana 提供的 MDN 链接现已损坏,所以这里是更新的链接 - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-04-01 09:32:13
这是最好的答案,但是根据功能,它可能会出现意外行为。例如console.log.bind(null)("Log me")会 throw Illegal invocation,但console.log.bind(console)("Log me")会按预期工作。这是因为console.log需要console作为this参数。
2021-04-10 09:32:13
非常干净和高效!
2021-04-11 09:32:13

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

setInterval(funca, 500, 10, 3);

您问题中的语法使用了 eval,这不是推荐的做法

2021-03-23 09:32:13
@Kev Internet Explorer 真是一团糟它不支持传递参数-.-
2021-03-30 09:32:13
哇?!从什么时候开始允许的?(严肃的问题)
2021-04-01 09:32:13
恕我直言,这应该是公认的答案。漂亮、简单和干净的解决方案。
2021-04-02 09:32:13
     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
这就是我要找的,这应该是最重要的
2021-03-17 09:32:13
最佳解释答案。
2021-03-30 09:32:13
那么为什么将参数作为数组传递呢?这个细节甚至与问题无关。
2021-03-30 09:32:13

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

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”,在上面的例子中,将具有正确的范围。

可以通过 Classname.prototype.someFunction.parameter1 访问
2021-03-30 09:32:13
向对象或函数添加参数会导致编译器变慢,因为它必须重建对象的本机代码表示(例如,如果这是在热循环中完成的),所以要小心。
2021-03-30 09:32:13