อัฒภาคเพื่อความปลอดภัยใน IIFE
ตอนนี้ให้ฟังก์ชันที่เรียกใช้ทันทีของเรา ไม่ได้เริ่มต้นด้วยเครื่องหมายบวก แต่ถูกห่อหุ้มด้วยวงเล็บ แบบนี้:
(function() {
console.log(1); // แสดง 1
})();
ให้ตัวแปร num ถูกกำหนดจากภายนอก
ฟังก์ชัน:
let num = 1; // มีอัฒภาค
(function() {
console.log(num); // แสดง 1
})();
ตอนนี้สมมติว่าเราลืมใส่อัฒภาค:
let num = 1
(function() {
console.log(num); //!! จะเกิดข้อผิดพลาด
})();
ปรากฎว่าโค้ดดังกล่าวจะเกิดข้อผิดพลาด เพราะว่า JavaScript มองฟังก์ชันของเรา ว่าเป็นความต่อเนื่องของคำสั่งในบรรทัดแรก
เพื่อหลีกเลี่ยงปัญหาดังกล่าว ก่อนเรียก ฟังก์ชันทันที จำเป็นต้องใส่ อัฒภาคเสมอ แบบนี้:
let num = 1
;(function() {
console.log(num); // แสดง 1
})();
อาจดูเหมือนว่าปัญหานี้ถูกยัดเยียด แต่จริง ๆ แล้ว ไม่ใช่เลย อาจมี สถานการณ์ที่หน้าเว็บของคุณโหลด หลายสคริปต์จากไฟล์แยกต่างหาก ใน กรณีนี้ตอนท้ายของไฟล์หนึ่งอาจจะ ไม่มีอัฒภาคและสิ่งนี้จะนำไปสู่ ปัญหาทันทีหากไฟล์ที่สองเริ่มต้น ด้วยการเรียกฟังก์ชันทันที
ดังนั้น ใส่อัฒภาคเสมอ-เสมอ ก่อนเรียกฟังก์ชันทันที แม้ว่า ในขณะนี้คุณจะมั่นใจว่า จะไม่มีปัญหา แต่ปัญหาอาจเกิดขึ้นในภายหลัง
ลองนำสิ่งที่กล่าวมาข้างต้นไปใช้และเรียกฟังก์ชัน ทันที โดยใส่อัฒภาคไว้ด้านหน้า:
;(function() {
console.log(1); // แสดง 1
})();
ลองกำหนดโดยไม่รันโค้ด ว่าจะแสดงอะไร ในคอนโซล:
let str = 'str';
(function() {
console.log(1);
})();
ลองกำหนดโดยไม่รันโค้ด ว่าจะแสดงอะไร ในคอนโซล:
let str = 'str'
(function() {
console.log(1);
})();