在setInterval函数中传递参数

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

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

287236 次浏览

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

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

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

setInterval(funca, 500, 10, 3);

你的问题中的语法使用eval,而不是推荐的做法

你可以使用匿名函数;

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

这个工作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"将具有正确的作用域。

引用论点就足够了:

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
另一个解决方案是像这样传递你的函数(如果你有动态变量): setInterval(“funca (' + x + ', ' + y + ')”,500年),< / p >

你可以使用一个名为下划线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 ()生命周期钩子的声明。

同时,与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);