2011-08-24 26 views
7

"tryMe" adlı bir işleve sahibim ve bunu parantez olmadan tam olarak söylemiyorum ama burada yaptığınız gibi bir fikir:Parantez olmadan bir işlevi çağırırken parametreler nasıl iletilir [Javascript]

setTimeout(tryMe,200); 

İhtiyacım olan parametreleri nasıl iletebilirim?

Bir işlevi çağırmamı sağlayan bir jquery eklentisi kullanıyorum, ancak parantez içine bakmam gerekiyor veya yükleme sırasında kendini yürütüyor.

+1

İşlev değerlendirildiği ve işlevin sonucu "setTimeout" öğesine iletildiği için yürütülür; Fonksiyonun kendisi beklediğiniz gibi geçmez. – Marc

+2

Yaptığınız şeyi "parantez olmadan bir işlev çağırmak" olarak tanımlamak doğru değil. Sorunuzda gönderdiğiniz ifadede işlev çağrılmaz.Bunun yerine, işlevin * bir * referansı başka bir işleve ('setTimeout') aktarılır, ki bu bir süre sonra (200 milisaniye sonra) fonksiyonunuzu ** ** parantez ile (kavramsal olarak) çağırır. Yine de, burada sorduğunuz şey çok yaygın bir karışıklık noktasıdır ve cevap pek açık değildir. – Pointy

+0

@Olumum Bana açıkladığınız için teşekkürler =) – Tsundoku

cevap

11
setTimeout(function() { tryMe(parm1, parm2); }, 200); 

Bir daha sağlam sunan, parm1 değerleri parm2 (@ lincolnk yorumuna göre) zaman aşımı yangınları önce değişmez sağlamak için:

setTimeout(function() { 
    var p1 = parm1; 
    var p2 = parm2; 
    tryMe(p1, p2); 
}, 200); 

@ Patrick Dw, haklısın, daha önce değerlendirilmeli.

+3

Sadece zaman aşımına uğramadan önce parametre değerlerinizi değiştirmediğinizden emin olun. – lincolnk

+1

Güncellemeniz, orijinalden farklı davranmayacak. 'SetTimeout' çağrıldığında mevcut olan değerleri sağlamak için * bir işlevi * çağırmanız, yerel olarak * bu * işlevine yerel olarak başvurmanız ve işlevin yerel olarak tanımlanmış referanslara başvuran bir işlev döndürmesi gerekir. – user113716

+0

Daha zarif bir yol kullanmak için __setTimeout (tryMe.bind (window, parm1, parm2), 200); __. bind(), IE8 veya daha az desteklenmez, ancak javascript eşdeğeri ile uygulanabilir. –

4

Kapanışta tryMe'u kapatabilirsiniz. Örneğin

: Burada

var f = function(){tryMe('some parameter');}; 
setTimeout(f, 200); 

, istenilen parametre (ler) ile tryMe çağıran bir işlev nesnesini f oluşturmak. Sonra fsetTimeout'a geçeriz. Zaman aşımı süresi dolduğunda, tryMe'u istenilen parametrelerle arayacak olan f çağrılır. Bunu gibi bu değişkenleri bağlamak isteyeceksiniz:

Uyarı bir kelime Eğer zaman aşımı önce değişebilir parametrelerinde geçmesine istiyorsanız (bir for döngü içinde birkaç zaman aşımları ayarlarken örneğin,) çağrılan

bunun yerine fonksiyon nesnenin tryMe kendisinin tryMe değerlendirerek sonucunu geçiyoruz çünkü
var f = function(someParamter){return function(){tryMe(someParameter);};}; 
setTimeout(f(someParameter), 200); 

basitçe çalışmaz

setTimeout(tryMe('some parameter'), 200); //Does not work. 

böyle bir şey yaptığını nedenidir.

+0

Doğru cevap bu olmalı –

0

Tarayıcı, 200 milisaniyeden sonra işlevi çağırmıyorsunuz. Sadece çağrılmaya ihtiyaç duyulan işlevle sağlanıyorsunuz. Firefox aslında setTimeout çağrısında ek parametreler belirterek sağlar: Ancak

setTimeout(tryMe, 200, "first parameter", "second parameter"); 

, zaten diğer cevaplar ile açıklanabilir olarak gerçekten bir kapatma işlevini kullanmalısınız hiçbir diğer tarayıcılarda bu özelliği destekleyen bildiğim kadarıyla. Burada, orijinal işlevinizi doğru parametrelerle çağırmak amacıyla geçici bir işlev oluşturursunuz.

setTimeout(function() {tryMe("first parameter", "second parameter")}, 200); 
İlgili konular