Saya telah mencari informasi tentang fungsi yang dipanggil secara langsung, dan di suatu tempat saya menemukan notasi ini:
+function(){console.log("Something.")}()
Bisakah seseorang menjelaskan kepada saya apa arti +
tanda di depan fungsi?
Saya telah mencari informasi tentang fungsi yang dipanggil secara langsung, dan di suatu tempat saya menemukan notasi ini:
+function(){console.log("Something.")}()
Bisakah seseorang menjelaskan kepada saya apa arti +
tanda di depan fungsi?
Jawaban:
Itu memaksa parser untuk memperlakukan bagian yang mengikuti +
sebagai ekspresi. Ini biasanya digunakan untuk fungsi yang dipanggil segera, misalnya:
+function() { console.log("Foo!"); }();
Tanpa di +
sana, jika parser berada dalam keadaan di mana ia mengharapkan pernyataan (yang bisa berupa ekspresi atau beberapa pernyataan non-ekspresi), kata tersebut function
tampak seperti awal dari deklarasi fungsi daripada ekspresi fungsi dan karenanya ()
mengikutinya (yang ada di akhir baris di atas) akan menjadi kesalahan sintaksis (seperti halnya tidak adanya nama, dalam contoh itu). Dengan yang +
, itu membuat ekspresi fungsi, yang berarti nama adalah opsional dan yang menghasilkan referensi ke fungsi, yang dapat dipanggil, sehingga kurung berlaku.
+
hanyalah salah satu opsi. Hal ini juga dapat -
, !
, ~
, atau hanya tentang unary operator lainnya. Sebagai alternatif, Anda dapat menggunakan tanda kurung (ini lebih umum, tetapi tidak lebih dan kurang benar secara sintaksis):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
Anak perusahaan dari jawaban @ TJCrowder, +
biasanya digunakan untuk memaksa casting numerik dari suatu nilai sebagaimana dijelaskan oleh SO ini . Dalam hal ini disebut 'operator plus unary' (untuk kemudahan googling).
var num = +variant;
Jadi di depan fungsi itu bisa menjadi cara untuk memaksa hasil fungsi ditafsirkan sebagai angka. Saya ragu itu belum terjadi, tetapi secara teoritis JIT dapat menggunakannya untuk mengkompilasi fungsi sebagai fungsi numerik-satunya dll. Namun, untuk mencegah unary plus menjadi gabungan ketika digunakan dalam ekspresi yang lebih besar, Anda akan membutuhkan tanda kurung:
blah + (+(function(){ var scope; return "4"; })());
(+function() { ... })()
notasi tidak pernah dapat mengeksekusi tanpa kesalahan (terlepas dari fakta bahwa ini tidak menjawab pertanyaan).
3++function...
yang tidak sama.
+function...
itu tidak perlu dalam dirinya sendiri. Hasil yang sama dapat diperoleh dengan blah + function( ){ ... }( );
yang akan meniadakan kebutuhan untuk tanda kurung.
Jadi jawaban singkatnya adalah itu mencegah kesalahan sintaks, dengan menggunakan hasil fungsi dalam satu atau lain cara.
Anda juga dapat menginstruksikan mesin bahwa Anda bahkan tidak tertarik pada nilai pengembalian dengan menggunakan void
operator:
void function() { console.log("Foo!"); }();
Tentu saja, menempatkan kawat gigi di sekitar semuanya juga melayani tujuan itu.