2013-04-04 21 views
10

Aşağıdaki kod neden 2 uyar? Benim görebildiNeden iki işlev tanımının sonucu bir virgülle birleştiriliyor?

var f = (function x(){ return 1; }, function y(){ return 2; })(); 
alert(f); 

nasılsa y işlevi yürütür oluyor ve x işlevi göz ardı edilir olmasıdır. (Ben her iki fonksiyonlarda alert koymak emin yaptık ve sadece y içinde alert denir bana x işlevi hiç çağrılan olmadığını inandırmak olan)

Ve sonra y işlevini kaldırmak eğer uyarır 1.

Neler oluyor?

cevap

14

Tamam, hadi biraz bozalım.

(function x(){ return 1; }, function y(){ return 2; }) 

comma operator literals.Next iki fonksiyonu kullanılır mı. İfadeleri (her iki işlev) değerlendirir ve sonuncuyu döndürür. Bu ifadenin sonucudur: function y(){ return 2; }

kalan ifadesidir Anlamı: var f = (function y(){ return 2; })();

yaptığımız sonraki şey hangi değişken f içine 2 döndürür (() ile) diyoruz olduğu; Eğer comma operator kullandığınızda

+0

Teşekkür ederim dostum, 2 cevap kabul etmeyi bilmiyorum böyle bir seçenek olmalıydı. bu yüzden seni reddedeceğim. –

+0

Eh, diğer cevap da iyidir. Dürüst olmak gerekirse, cevabım ilk önce birkaç dakika oldu, aynı kaynağa bağlanıyor ama onu alıntılamak yerine açıklıyor ve bence konuya daha iyi bir açıklama getiriyor, bu sadece benim düşüncem. –

+0

Üzgünüm dostum, sadece 1 nedenden ötürü başka bir cevabı kabul ettim ve bu benim ekranımda kabul edilen cevabın sizinkilerden 2 dakika önce olduğunu görebiliyorum. Bu yüzden ne yapacağımı bilemiyorum, kafam karıştı :( –

5

, döndürülen değer olduğunu geçen elemanın senin olayda, mozilla Dokümanlar

(2 döner) işlevi y():

virgül operatörü her iki işleneni de (soldan sağa) olarak değerlendirir ve ikinci işlenenin değerini döndürür.

Tek bir ifade gerektiren bir konumda birden çok ifade eklemek istediğinizde virgül işlecini kullanabilirsiniz. Bu operatörün en çok kullanılan ortak kullanımı, döngü için birden çok parametre tedarik etmektir.

İlgili konular