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.