JavaScript'te bir işlevi tanımlamanın birkaç yolu olduğunu biliyorum. En yaygın olanları ikisi şunlardır:"Geleneksel" C stili işlev bildirimini kullandığımda JavaScript'te neler oluyor?
(1) function add (a, b) {
return a + b;
}
(2) var add = function (a, b) {
return a + b;
}
Ben tıpkı diğer değişkenler gibi etrafında geçirilebilir bir nesne olarak bir fonksiyonun fikri ile rahatım. Yani (2)
'un ne yaptığını mükemmel anlıyorum. Bir işlev yaratıyor ve add
'a atayım (bunun global kapsamda olduğunu söyleyelim, yani add
global bir değişkendir). Ama bunun yerine (1)
kullanıyorsam ne oluyor? Zaten yürütme sırasına göre bir fark yarattığını zaten biliyorum:kullanırsam add()
'un tanımlandığı koddaki noktadan önce add()
'a başvurabilirim, ancak (2)
kullanıyorum, sonra da işlevimi add
adresine atayabilirim. add()
'a başvurmaya başlayabilirsiniz.
için bir kısayol olabilir, ancak diğer C stili diller gibi davranıp davranmadığı bir işlev tanımlamamıza izin veren bir kısayol olabilir mi? Yoksa dahili olarak farklı bir işlev türü midir? Hangi daha fazla "JavaScript'in ruhu" (eğer bu bir terim çok belirsiz ise)? Kendinizi bir diğeriyle sınırlar mısınız, eğer öyleyse hangisi?
ECMAScript teknik özelliklerine göre 'if' ifadesi bloğu içinde bir işlev bildirimi bir sözdizimi hatasıdır. Büyük tarayıcıların hiçbiri, IE ve Mozilla tarafından ayarlanan emsallerden dolayı hata yapmıyor. Mozilla ECMAScript'e bir uzantı içerecek şekilde çepeçevre alır (http://www.jibbering.com/faq/#functionStatement, http://kangax.github.com/nfe/#function-statements) bir 'FunctionStatement' adı. JScript, spekülasyona daha az saygı duyar ve Tanrı-bilir-ne içseldir. –
Düzenlemenize bir yorum: fonksiyon tanımlamaları da yanlış işlev ifadeleri olarak anılacaktır, ancak olduğu doğrudur. (Önceki açıklamada bağlantılı) comp.lang.javascript SSS çok ikna edici bu noktayı yapar: * "terimi fonksiyon ifadesi yaygın ve yanlış çünkü ECMAScript'teki bir' FunctionDeclaration yanıltıcı bir 'FunctionDeclaration'.This tanımlamak için kullanılmıştır 'a Statement' değildir; orada' Statement' izin verilen bir programda yerler vardır ama bir 'FunctionDeclaration' değil" * –
@Tim: ilginç yorumlar için teşekkürler.. Sorunu adlandırma "ifadesi" farkında değildi. –