356

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

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

4

18 回答 18

600

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

setInterval( function() { funca(10,3); }, 500 );
于 2009-01-19T14:53:48.957 回答
91

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

setInterval(funca, 500, 10, 3);

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

于 2009-01-19T14:54:32.903 回答
89

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

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

参考这里

于 2012-10-01T03:42:03.940 回答
36
     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
于 2014-01-10T06:03:33.183 回答
33

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

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

于 2011-12-14T19:37:51.237 回答
21
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);

于 2015-07-14T14:40:04.683 回答
18

您可以使用匿名函数;

setInterval(function() { funca(10,3); },500);
于 2009-01-19T14:55:23.307 回答
13

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

setInterval( ()=>{ funca(10,3); }, 500);
于 2016-07-02T00:12:38.270 回答
7

引用论点就足够了:

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

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

注意每个参数的单引号'

通过 IE8、Chrome 和 FireFox 测试

于 2012-01-25T17:23:58.317 回答
3
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);

有很多方法可以做到这一点,我个人认为这是干净和甜蜜的。

于 2020-10-17T20:24:34.923 回答
2

这个答案的最佳解决方案是下一个代码块:

setInterval(() => yourFunction(param1, param2), 1000);
于 2021-07-17T10:45:31.243 回答
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);
}
于 2016-07-02T00:04:52.717 回答
0

这行得通setInterval("foo(bar)",int,lang);.... Jon Kleiser引导我找到答案。

于 2011-12-04T07:10:41.567 回答
0

另一个解决方案包括像这样传递你的函数(如果你有动态变量): setInterval('funca('+x+','+y+')',500);

于 2014-02-16T07:46:40.337 回答
0

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

http://underscorejs.org/#bind

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

于 2015-03-04T15:33:53.377 回答
0

这个问题将是使用闭包的一个很好的演示。这个想法是函数使用外部范围的变量。这是一个例子......

setInterval(makeClosure("Snowden"), 1000)

function makeClosure(name) {
var ret

ret = function(){
    console.log("Hello, " + name);
}

return ret;
}

函数“makeClosure”返回另一个函数,该函数可以访问外部范围变量“name”。因此,基本上,您需要将任何变量传递给“makeClosure”函数,并在分配给“ret”变量的函数中使用它们。有影响地,setInterval 将执行分配给“ret”的函数。

于 2019-01-02T11:57:14.143 回答
0

我对 Vue 应用程序也有同样的问题。在我的情况下,这个解决方案只有在匿名函数被声明为箭头函数时才有效,关于mounted ()生命圈钩子的声明。

于 2020-04-16T14:48:04.527 回答
0

此外,在 IE Support > 9 的情况下,您可以传递更多变量内部设置间隔,您的函数将采用这些间隔。例如:

function myFunc(arg1, arg2){};
setInterval(myFunc, 500, arg1, arg2);

问候!

于 2020-10-08T12:38:32.460 回答