在setInterval函数中传递参数

2020/10/02 22:21 · javascript ·  · 0评论

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

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

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

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

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

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

这里参考

将它们添加为setInterval的参数:

setInterval(funca, 500, 10, 3);

您问题中的语法使用eval,不建议您这样做。

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

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(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
setInterval(function,milliseconds,param1,param2,...)

更新:2018-使用“ spread”运算符

function repeater(param1, param2, param3){
   alert(param1);
   alert(param2);
   alert(param3); 
}

let input = [1,2,3];
setInterval(repeater,3000,...input);

您可以使用匿名函数;

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

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

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

引用参数就足够了:

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

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

注意'每个参数的单引号

经过IE8,Chrome和FireFox的测试

我知道这个主题太老了,但这是我在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);
}

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

另一种解决方案是传递这样的函数(如果您具有动力学变量):setInterval('funca('+ x +','+ y +')',500);

您可以使用下划线js库。它为bind方法提供了很好的包装,并且语法也更加简洁。让您在指定范围内执行功能。

http://underscorejs.org/#bind

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

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

setInterval(makeClosure("Snowden"), 1000)

function makeClosure(name) {
var ret

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

return ret;
}

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

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

本文地址:http://javascript.askforanswer.com/zaisetintervalhanshuzhongchuandicanshu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!