2013-03-14 11 views
13

Jak mogę przekazywać argumenty w funkcji setInterval npJavaScript setInterval funkcji z argumentami

intId = setInterval(waiting(argument), 10000); 

widnieje błąd : useless setInterval call (missing quotes around argument?)

+1

setInterval (funkcja() {oczekiwania (argumentu)}, 10000) – rab

+0

możliwe duplikat [parametrów przejścia w funkcji setInterval] (http://stackoverflow.com/questions/457826/pass-parameters-in-setinterval-function) – 416E64726577

Odpowiedz

39

Użyj funkcji anonimowej

intId = setInterval(function(){waiting(argument)}, 10000); 

Stwarza to bez parametrów anonimowa funkcja, która wywołuje waiting() z argumentami

lub użyj opcjonalne parametry funkcji setInterval():

intId = setInterval(waiting, 10000, argument [,...more arguments]); 

Twój kod (intId = setInterval(waiting(argument), 10000);) wzywa waiting() z argument, przybiera wartości zwracanej, stara się traktować ją jako funkcję i ustawia interwał dla tej wartości zwracanej . Chyba że waiting() jest funkcją, która zwraca inną funkcję, to się nie powiedzie, ponieważ możesz traktować funkcje tylko jako funkcje. Liczby/napisy/obiekty nie mogą być typowane do funkcji.

6

Zastosowanie tej metody:

var interval = setInterval(callback , 500 , arg1 , arg2[, argn ]); 
[...] 
function callback(arg1, arg2[, etc]){ 
} 

Więcej informacji tutaj: window.setInterval

10

Można użyć Function#bind:

intId = setInterval(waiting.bind(window, argument), 10000); 

Zwraca funkcję, która będzie wywołać funkcję docelowego z danym kontekście (window) i opcjonalne argumenty.

-2

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

+0

[This] (https://stackoverflow.com/q/457826/4642212) to pytanie, na które próbujesz odpowiedzieć. – Xufox

1

Możesz użyć funkcji bind i apply, aby zapisać argument w stanie.

przykład za pomocą wiązania w węźle powłoki:

> var f = function(arg) { console.log (arg);} 
> f() 
undefined 
> f("yo") 
yo 
> var newarg = "stuff"; 
> f(newarg) 
stuff 
> var fn = f.bind(this, newarg); 
> fn() 
stuff 
> var temp = setTimeout(fn,1000) 
> stuff 
Powiązane problemy