Hemen çağrılan işlevler hakkında bilgi arıyordum ve bir yerde bu gösterimde tökezledim:
+function(){console.log("Something.")}()
Birisi bana +
işlevin önündeki işaretin ne anlama geldiğini / ne anlama geldiğini açıklayabilir mi?
Hemen çağrılan işlevler hakkında bilgi arıyordum ve bir yerde bu gösterimde tökezledim:
+function(){console.log("Something.")}()
Birisi bana +
işlevin önündeki işaretin ne anlama geldiğini / ne anlama geldiğini açıklayabilir mi?
Yanıtlar:
Ayrıştırıcıyı, +
ifadesini izleyen bölümü işlemeye zorlar . Bu genellikle hemen çağrılan işlevler için kullanılır, örneğin:
+function() { console.log("Foo!"); }();
+
Orada olmadan, ayrıştırıcı bir ifade (veya bir ifade veya birkaç ifade olmayan ifade olabilir) beklediği bir durumdaysa, sözcük bir işlev ifadesinden ziyade function
bir işlev bildiriminin başlangıcı gibi görünür ve bunu takip eder. (yukarıdaki satırın sonundaki olanlar) bir sözdizimi hatası olacaktır (bu örnekte bir adın olmaması gibi). İle , bir işlev ifadesi yapar, bu da adın isteğe bağlı olduğu ve çağrılabilen işleve başvuru ile sonuçlandığı ve parantezlerin geçerli olduğu anlamına gelir.()
+
+
seçeneklerden sadece biri. Ayrıca olabilir -
, !
, ~
, ya da sadece başka bir tekli operatöründen hakkında. Alternatif olarak, parantezleri kullanabilirsiniz (bu daha yaygındır, ancak sözdizimsel olarak ne daha fazla ne de daha az doğrudur):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
@ TJCrowder'ın cevabına bağlı olarak +
, genellikle bu SO cevabının açıkladığı gibi bir değerin sayısal olarak dökümünü zorlamak için kullanılır . Bu örnekte 'tekli artı operatör' (googling kolaylığı için) olarak adlandırılır.
var num = +variant;
Dolayısıyla, bir işlevin önünde, işlevin sonucunu bir sayı olarak yorumlanmaya zorlamanın bir yolu olabilir. Henüz gerçekleştiğinden şüpheliyim, ancak teorik olarak JIT işlevi sadece sayısal bir işlev vb. Olarak derlemek için kullanabilir. Ancak, tekli artı daha büyük bir ifadede kullanıldığında bir birleştirme olmasını önlemek için parantez gerekir:
blah + (+(function(){ var scope; return "4"; })());
(+function() { ... })()
Notasyonu (Bu soruya cevap vermez gerçeği dışında) hatasız yürütmek olamaz.
3++function...
.
+function...
kendi içinde gereksizdir. Aynı sonuç blah + function( ){ ... }( );
, sargı braketlerine olan ihtiyacı da ortadan kaldırabilir .
Bu nedenle kısa cevap, işlev sonuçlarını bir şekilde kullanarak sözdizimi hatasını önler.
void
Operatöre kullanarak motora dönüş değeri ile bile ilgilenmediğinizi de bildirebilirsiniz :
void function() { console.log("Foo!"); }();
Tabii ki, her şeyin etrafında parantez koymak da bu amaca hizmet eder.