มีตัวเลือกJSLintซึ่งเป็นหนึ่งใน The Good Parts ที่ "[ต้อง] parens สำหรับการเรียกใช้ทันที" ซึ่งหมายความว่าการก่อสร้าง
(function () {
// ...
})();
จะต้องเขียนเป็น
(function () {
// ...
}());
คำถามของฉันคือ - ใครสามารถอธิบายได้ว่าเหตุใดรูปแบบที่สองนี้จึงถือว่าดีกว่า มีความยืดหยุ่นมากขึ้นหรือไม่? เกิดข้อผิดพลาดน้อยกว่า? รูปแบบแรกมีข้อดีอย่างไร?
ตั้งแต่ถามคำถามนี้ฉันได้เข้าใจถึงความสำคัญของการมีความแตกต่างทางภาพที่ชัดเจนระหว่างค่าฟังก์ชันและค่าของฟังก์ชัน พิจารณากรณีที่ผลลัพธ์ของการเรียกใช้ทันทีอยู่ทางขวามือของนิพจน์การมอบหมาย:
var someVar = (function () {
// ...
}());
แม้ว่าวงเล็บด้านนอกสุดจะไม่จำเป็นทางไวยากรณ์ แต่วงเล็บเปิดจะให้การบ่งชี้ล่วงหน้าว่าค่าที่กำหนดไม่ใช่ฟังก์ชันเอง แต่เป็นผลลัพธ์ของฟังก์ชันที่เรียกใช้
สิ่งนี้คล้ายกับคำแนะนำของ Crockford เกี่ยวกับการใช้ตัวพิมพ์ใหญ่ของฟังก์ชันตัวสร้าง - มีไว้เพื่อใช้เป็นสัญญาณภาพสำหรับทุกคนที่ดูซอร์สโค้ด