2012-01-03 21 views
12

Javascript'te işlevlerin nasıl çalıştığı konusunda biraz kafam karışık. Onların tüm nesnelerin olduğunu anlıyorum ama bu onları nasıl argüman olarak kullanacağımı nasıl değiştiriyor? ÖrneğinJavascript'te yeni (anonim) bir işlev bildirmek ne zaman?

, ben neden ile aynı etkiyi elde edemez 2 argüman 1000ms sonra değerlendirilir bir geri çağırma işlevi ...

$(this).fadeIn(1000,function(){alert('done fading in');}); 

kullanmaya çalışıyorum eğer:

$(this).fadeIn(1000,alert('done fading in')); 

Yaparsam, her ikisini de aynı anda değerlendirir. Yani, (bu) eleman kaybolur ve uyarı aynı zamanda ortaya çıkar.

Uyarı (arg) aradığımda, fadeIn() içine iletilen yeni bir nesne oluşturmuyor muyum?

Bu nasıl çalışır?

+0

iyi soru. Bunun için uğraşacağım bir – OptimusCrime

+0

Dilin kulları için: İstediğiniz teknik * [kısmi fonksiyon uygulaması] [1] * olarak da adlandırılır ve genellikle * Currying * olarak adlandırılır. Bazı argümanların sabit olduğu ve diğerlerinin etkin olmadığı yeni bir işlevi etkin bir şekilde kullanmak istersiniz. [1]: http://en.wikipedia.org/wiki/Partial_application –

+1

@nd: Hayır, bu gerçekten değil. Örnekte hiçbir körleme veya kısmi değerlendirme yoktur. Bir terim arıyorsanız, * anonim işlev * budur. Ayrıca * argüman olarak işlev alan işlevler için * daha yüksek sıralı fonksiyonlar *. – KaptajnKold

cevap

19

executeing önce

alert('done fading in'); 

çalıştırır? Biz) (() fadein çağırmadan önce uyarmak için çağrı yapıyoruz

alert('done fading in') 

arayarak sonucudur. Bu durumda

$(this).fadeIn(1000,function(){alert('done fading in');}); 

yılında

biz fadeIn() doğru zamanda çağırır Nesneyi

function(){alert('done fading in');} 

var.

2

İlk satırda ikinci parametre bir yöntemdir. Ve ikinci satırda bir yöntem çağrısı.

zaman bunun Yani yaptığımız, fadeInCallback referansı o solma bitince fadeInCallback çağrı böylece jQuery fadeIn fonksiyonu içinde geçer ki bu

function fadeInCallback() { 
    alert('done fading in'); 
} 

$(this).fadeIn(1000, fadeInCallback); 

gibi yazabiliriz.

ikinci satır bu

$(this).fadeIn(1000,alert('done fading in')); 

fadeIn() ikinci argüman olarak ne görüyor yılında jQuery fadeIn işlevini

5

Eğer yazarken:

$(this).fadeIn(1000,alert('done fading in')); 

sen immadiately bu adından sonra işlev adı ve parantez koyarak uyarı denilen işlevini çağırın. Ve solması için Bu çağrının sonucu geçilir - bu tanımsızdır, çünkü uyarı her zaman tanımsız olarak geri döner. Eğer

$(this).fadeIn(1000,function(){alert('done fading in');}); 

yazarken

Eğer fadeIn için bu işlev nesnesini geçmek ve bir fonksiyon nesne oluşturmak.Bu yüzden, fadeIn bittikten sonra bu işlevi çağırabilir.

O aynıdır:

// create function 
var callback = function() { alert('done fading in'); }; 
// and pass this function to fadeIn 
$(this).fadeIn(1000, callback); 

ama yazarken:

var callback = alert('done fading in'); 
$(this).fadeIn(1000, callback); 

o zaman immadiately uyarı arayıp fadeIn değerine uyarı döner geçecek - tanımlanmamış.

İlgili konular