在setInterval中将函数作为参数

时间:2014-01-31 21:54:57

标签: javascript jquery

我只是想将一个函数传递给setInterval函数。似乎没有使用我的代码。现在,下面的代码首先工作,但是在调用setInterval函数时如何传递函数参数?

//Works here

ajaxUpdateOne(function(countOne,countTwo) {
    var itemCount = countOne;
    var totalCount = countTwo;
    console.log(itemCount);
    console.log(totalCount);
});

//Does not work here.

var myVar = ajaxUpdateOne(function(countOne,countTwo) {
    var itemCount = countOne;
    var totalCount = countTwo;
    console.log(itemCount);
    console.log(totalCount);
});

setInterval(myVar,8000);

2 个答案:

答案 0 :(得分:3)

目前,您使用匿名函数作为参数调用ajaxUpdateOne()myVar不是函数。

将您的代码更改为

var myVar = function () {
    ajaxUpdateOne(function (countOne, countTwo) {
        var itemCount = countOne;
        var totalCount = countTwo;
        console.log(itemCount);
        console.log(totalCount);
    });
}
setInterval(myVar, 8000);

答案 1 :(得分:2)

虽然您发布的代码是部分的,并且不清楚ajaxUpdateOne()做了什么,但我假设它调用$.ajax()并根据响应结果更新页面。但是,为了能够将参数传递给稍后在setInterval()中调用的函数,可以使用以下构造:

var deferredUpdate = function(countOne, countTwo) {
  return function() { ajaxUpdateOne(countOne, countTwo); }
}


setInterval(deferredUpdate(42,3), 8000);
setInterval(deferredUpdate(1,2), 2000);

这里的诀窍是你的deferredUpdate()返回一个函数本身,而不是一个值。但是,此结果函数的参数绑定在特定的闭包中。这是函数式编程的基本技术之一。