Pertanyaan JavaScript plus tanda di depan nama fungsi


Saya telah mencari info tentang fungsi memohon-diri, dan di suatu tempat saya menemukan notasi ini:

+function(){}

Bisakah seseorang menjelaskan kepada saya apa itu + masuk di depan fungsi berarti / tidak?


777
2017-11-12 10:06


asal


Jawaban:


Ini memaksa parser untuk mengobati bagian yang mengikuti + sebagai ekspresi. Ini biasanya digunakan untuk fungsi yang dipanggil segera, misalnya:

+function() { console.log("Foo!"); }();

Tanpa + di sana, jika parser dalam keadaan di mana ia mengharapkan pernyataan (yang dapat berupa ekspresi atau beberapa pernyataan non-ekspresi), kata function tampak seperti awal suatu fungsi pernyataan bukan sebuah fungsi ekspresi dan begitu () mengikutinya (yang berada di akhir baris di atas) akan menjadi kesalahan sintaks (seperti halnya absennya nama, dalam contoh itu). Dengan itu +, membuatnya menjadi ekspresi fungsi, yang artinya nama tersebut opsional dan yang menghasilkan referensi ke fungsi, yang dapat dipanggil, sehingga tanda kurung valid.

+ hanyalah salah satu opsi. Itu juga bisa -, !, ~, atau hanya tentang operator unary lainnya. Sebagai alternatif, Anda dapat menggunakan tanda kurung (ini lebih umum, tetapi tidak lebih atau kurang tepat secara sintaksis):

(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());

1229
2017-11-12 10:07



Anak perusahaan untuk jawaban @ TJCrowder, + biasanya digunakan untuk memaksa pengecoran numerik suatu nilai karena jawaban SO ini menjelaskan. Dalam hal ini disebut 'unary plus operator' (untuk kemudahan googling).

var num = +variant;

Jadi di depan fungsi itu bisa menjadi cara untuk memaksa hasil fungsi untuk ditafsirkan sebagai angka. Saya meragukan itu belum terjadi, tetapi secara teoritis JIT dapat menggunakannya untuk mengkompilasi fungsi sebagai fungsi numerik saja dll. Namun, untuk mencegah unary plus menjadi penggabungan ketika digunakan dalam ekspresi yang lebih besar, Anda akan membutuhkan tanda kurung:

blah + (+(function(){ var scope; return "4"; })());

84
2017-11-12 10:54



Jadi jawaban singkatnya adalah ia mencegah kesalahan sintaks, dengan menggunakan hasil fungsi dengan satu atau lain cara.

Anda juga dapat menginstruksikan mesin bahwa Anda bahkan tidak tertarik pada nilai kembalian dengan menggunakan void operator:

void function() { console.log("Foo!"); }();

Tentu saja, meletakkan kawat gigi di sekitar semuanya juga berfungsi untuk tujuan itu.


47
2017-11-16 16:45