请告知如何将参数传递到使用setInterval的函数中。
setInterval
我的例子setInterval(funca(10,3), 500);不正确。
setInterval(funca(10,3), 500);
您需要创建一个匿名函数,这样实际的函数就不会立即执行。
setInterval( function() { funca(10,3); }, 500 );
将它们作为参数添加到setInterval:
setInterval(funca, 500, 10, 3);
你的问题中的语法使用eval,而不是推荐的做法。
你可以使用匿名函数;
setInterval(function() { funca(10,3); },500);
这个工作setInterval("foo(bar)",int,lang);....乔恩·克莱斯引导我到答案。
setInterval("foo(bar)",int,lang);
你可以将形参作为函数对象的属性传递,而不是形参:
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"将具有正确的作用域。
someFunction
引用论点就足够了:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000) KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
注意每个参数的单引号'。
'
通过IE8, Chrome和FireFox测试
现在用ES5,绑定方法函数原型:
setInterval(funca.bind(null,10,3),500);
参考这里
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
你可以使用一个名为下划线js的库。它对bind方法进行了很好的包装,语法也更简洁。允许您在指定范围内执行函数。
http://underscorejs.org/#bind
_。绑定(函数,作用域,*参数)
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函数。
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); }
到目前为止,最实用的答案是tvanfosson给出的,我所能做的就是给你一个ES6的更新版本:
setInterval( ()=>{ funca(10,3); }, 500);
这个问题可以很好地演示闭包的使用。其思想是函数使用外部作用域的变量。这里有一个例子……
setInterval(makeClosure("Snowden"), 1000) function makeClosure(name) { var ret ret = function(){ console.log("Hello, " + name); } return ret; }
函数“makeClosure”返回另一个函数,该函数可以访问外部作用域变量“name”。所以,基本上,你需要传递任何变量给“makeClosure”函数,并在函数中使用它们分配给“ret”变量。setInterval将执行分配给“ret”的函数。
我在Vue应用程序中遇到了同样的问题。在我的情况下,这个解决方案只适用于匿名函数声明为箭头函数,关于mounted ()生命周期钩子的声明。
mounted ()
同时,与IE支持>9,你可以传递更多的变量内部设置间隔,将采取你的函数。例句:
function myFunc(arg1, arg2){}; setInterval(myFunc, 500, arg1, arg2);
问候!
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);
有很多方法可以做到这一点,我个人认为这是干净和甜蜜的。
这个问题的最佳解决方案是下一段代码:
setInterval(() => yourFunction(param1, param2), 1000);
这对我很有效
let theNumber = document.getElementById('number'); let counter = 0; function skills (counterInput, timer, element) { setInterval(() => { if(counterInput > counter) { counter += 1; element.textContent = `${counter} %` }else { clearInterval(); } }, timer) } skills(70, 200, theNumber);