2014-01-31 5 views
1

Я просто пытаюсь передать функцию функции setInterval. Кажется, что я не работаю с моим кодом. Прямо сейчас код ниже работает сначала, но как передать параметры функции при вызове функции 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); 
+1

Ваш setInterval передается неопределенным, а не функцией. –

ответ

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() возвращает саму функцию, а не значение. Однако параметры этой результирующей функции связаны в конкретном замыкании. Это один из основных методов функционального программирования.

+0

Это действительно хорошее объяснение. У меня было много проблем с пониманием этих методов. Спасибо Алекс. – wowzuzz

+0

Спасибо! Пожалуйста, отметьте это как ответ, если это то, что вы искали. –

+0

Так что в основном то, что вы вызываете в аргументах, передается в ответ. – wowzuzz

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

Спасибо! Я не понимал, что у меня нет функции для моего вара. Поэтому для того, чтобы он прошел в методе setInterval, я должен сделать его функцией, как он выглядит, не так ли? – wowzuzz

Смежные вопросы