2013-12-08 22 views
6

Bu işlevi hemen çağırmadan parametreleri bir geriçağırım işlevine doğru şekilde iletme konusunda güvendim.Javascript: geri çağırma işlevine parametrelere nasıl geçilir

var callBack = function() { ... } 
window.setTimeout(callBack, 1000); 

Ama bu yanlışlıkla callBack arayacak:

Örneğin, bu beklendiği gibi çalışır aşağıdaki gibi

var callBack = function(param1, param2) { ... } 
window.setTimeout(callBack('foo','bar'), 1000); 

cevap

7

Sen diyebilirsin,

var callBack = function(param1, param2) { ... } 
window.setTimeout(function(){callBack('foo','bar');}, 1000); 
+0

Burada anonim bir işleve gerek yok - sadece kodu karıştırıyor. Settimeout işlevi, argümanları geri çağırmaya yönlendirir - bu yüzden neden kullanmıyorsunuz? – Lix

+1

@ Lix iki yolla kabul edilebilir, ancak argümanları geri bildirime iletmek sanırım desteklenmez. – melc

+0

@Lix Yine de bu cevabı gönderdim çünkü geri arama yapan fonksiyonun cb için argüman almaması durumunda çalışan daha genel bir çözüm olduğunu gösteriyorum. Şimdi sadece 'bind()' eksik (belirtilmek üzere, daha fazla değil) :) –

8

yolu parametreleri geçmek için the documentation of settimeout()'da belirtildiği gibi zaman parametresinden sonra.

var timer = window.setTimeout(func, delay, [ param1, param2, ... ] 

ilk bağımsız ikinci milisaniye cinsinden süredir ve son (isteğe bağlı) bağımsız değişken geri arama geçirmek için parametre dizisi olan, gerçek geri arama.

Yani, örneğin bu gibi bir şey olacaktır:

window.setTimeout(callBack, 1000, [ "foo", "bar" ]); 

bir geri çağırma işlevine parametrelerini geçirmek için kullanılan yöntemdir kod uygulanmasında farklılık olarak Sorunuzun başlık biraz yanıltıcı onu kullanarak. Tahmin edebileceğiniz gibi, gerçek işlev nesnesinin ve parametrelerinin, işlevlerin yürütülmesi daha sonraki bir zamana ertelendikçe birlikte geçirilmesi gerekmez; Ancak o zaman parametrelerin geri arama ile temas etmesi gerekir. Bu yazı bir göz alabilir bir geri arama nesnesine argümanları geçmek nasıl daha genel bir açıklama için


: JavaScript: Passing parameters to a callback function.

İlgili konular