Ada opsi JSLint , salah satu dari The Good Parts, yang "[membutuhkan] parens di sekitar pemanggilan langsung," yang berarti bahwa konstruksi
(function () {
// ...
})();
sebagai gantinya perlu ditulis sebagai
(function () {
// ...
}());
Pertanyaan saya adalah - adakah yang bisa menjelaskan mengapa bentuk kedua ini bisa dianggap lebih baik? Apakah lebih tangguh? Lebih sedikit rawan kesalahan? Keuntungan apa yang dimilikinya dibandingkan bentuk pertama?
Sejak mengajukan pertanyaan ini, saya telah memahami pentingnya memiliki perbedaan visual yang jelas antara nilai fungsi dan nilai fungsi. Pertimbangkan kasus di mana hasil seruan langsung berada di sisi kanan ekspresi tugas:
var someVar = (function () {
// ...
}());
Meskipun tanda kurung terluar secara sintaksis tidak diperlukan, tanda kurung buka memberikan indikasi di muka bahwa nilai yang ditetapkan bukanlah fungsi itu sendiri melainkan hasil dari fungsi yang dipanggil.
Ini mirip dengan saran Crockford tentang kapitalisasi fungsi konstruktor - ini dimaksudkan sebagai petunjuk visual bagi siapa pun yang melihat kode sumber.
sumber
Jawaban:
Dari panduan konvensi gaya Douglass Crockford : (telusuri "dipanggil segera")
Jika suatu fungsi akan dipanggil segera, seluruh ekspresi pemanggilan harus dibungkus dalam tanda kurung sehingga jelas bahwa nilai yang dihasilkan adalah hasil dari fungsi dan bukan fungsi itu sendiri.
Jadi, pada dasarnya, dia merasa lebih jelas perbedaan antara nilai fungsi dan nilai fungsi. Jadi, ini masalah gaya, bukan perbedaan mendasar dalam kode itu sendiri.
referensi yang diperbarui, PPT lama sudah tidak ada
sumber
Fungsi Anonim yang Segera Disebut terbungkus dalam tanda kurung karena:
Mereka adalah ekspresi fungsi dan meninggalkan tanda kurung akan menyebabkannya ditafsirkan sebagai deklarasi fungsi yang merupakan kesalahan sintaksis.
Ekspresi fungsi tidak boleh dimulai dengan fungsi kata.
Saat menetapkan ekspresi fungsi ke variabel, fungsi itu sendiri tidak dikembalikan, nilai yang dikembalikan dari fungsi tersebut dikembalikan
, maka orang tua mengevaluasi apa yang ada di dalamnya dan menghasilkan nilai.ketika fungsi dijalankan, dan tanda kurung di belakang..}()
menyebabkan fungsi segera dijalankan.sumber
Atau, gunakan:
sumber