在setInterval函数中传递参数

时间:2009-01-19 14:52:16

标签: javascript parameters javascript-events setinterval

请告知如何将参数传递给使用setInterval调用的函数。

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

18 个答案:

答案 0 :(得分:501)

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

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

答案 1 :(得分:70)

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

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

<强> Reference here

答案 2 :(得分:51)

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

setInterval(funca, 500, 10, 3);

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

答案 3 :(得分:30)

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

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

答案 4 :(得分:17)

您可以使用匿名函数;

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

答案 5 :(得分:16)

     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

答案 6 :(得分:14)

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

答案 7 :(得分:11)

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

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

答案 8 :(得分:6)

引用参数应该足够了:

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

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

请注意每个参数的单引号'

使用IE8,Chrome和FireFox测试

答案 9 :(得分:1)

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

setInterval(() => yourFunction(param1, param2), 1000);

答案 10 :(得分:1)

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

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

答案 11 :(得分: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);
}

答案 12 :(得分:0)

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

http://underscorejs.org/#bind

_.bind(function,scope,* arguments)

答案 13 :(得分:0)

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

setInterval(makeClosure("Snowden"), 1000)

function makeClosure(name) {
var ret

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

return ret;
}

函数“ makeClosure”返回另一个函数,该函数可以访问外部作用域变量“名称”。因此,基本上,您需要将任何变量传递给“ makeClosure”函数,并在分配给“ ret”变量的函数中使用它们。因此,setInterval将执行分配给“ ret”的功能。

答案 14 :(得分:0)

我在Vue应用程序中遇到了同样的问题。就我而言,这种解决方案仅在匿名函数已声明为箭头函数(关于mounted ()生命周期挂钩处的声明)下才有效。

答案 15 :(得分:0)

此外,在IE支持> 9的情况下,您可以在函数设置的内部间隔中传递更多变量。例如:

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

问候!

答案 16 :(得分:0)

另一种解决方案在于传递你的功能(如果你有动态变量): 的setInterval( 'FuncA的行(' + X + ' '+ Y +')',500);

答案 17 :(得分:0)

这有效setInterval("foo(bar)",int,lang); .... Jon Kleiser 引导我回答。