อัฒภาคเพื่อความปลอดภัยใน IIFE

ตอนนี้ให้ฟังก์ชันที่เรียกใช้ทันทีของเรา ไม่ได้เริ่มต้นด้วยเครื่องหมายบวก แต่ถูกห่อหุ้มด้วยวงเล็บ แบบนี้:

javascript(function() {
  console.log(1); // แสดง 1
})();

ให้ตัวแปร num ถูกกำหนดจากภายนอก ฟังก์ชัน:

javascriptlet num = 1; // มีอัฒภาค

(function() {
  console.log(num); // แสดง 1
})();

ตอนนี้สมมติว่าเราลืมใส่อัฒภาค:

javascriptlet num = 1

(function() {
  console.log(num); //!! จะเกิดข้อผิดพลาด
})();

ปรากฎว่าโค้ดดังกล่าวจะเกิดข้อผิดพลาด เพราะว่า JavaScript มองฟังก์ชันของเรา ว่าเป็นความต่อเนื่องของคำสั่งในบรรทัดแรก

เพื่อหลีกเลี่ยงปัญหาดังกล่าว ก่อนเรียก ฟังก์ชันทันที จำเป็นต้องใส่ อัฒภาคเสมอ แบบนี้:

javascriptlet num = 1

;(function() {
  console.log(num); // แสดง 1
})();

อาจดูเหมือนว่าปัญหานี้ถูกยัดเยียด แต่จริง ๆ แล้ว ไม่ใช่เลย อาจมี สถานการณ์ที่หน้าเว็บของคุณโหลด หลายสคริปต์จากไฟล์แยกต่างหาก ใน กรณีนี้ตอนท้ายของไฟล์หนึ่งอาจจะ ไม่มีอัฒภาคและสิ่งนี้จะนำไปสู่ ปัญหาทันทีหากไฟล์ที่สองเริ่มต้น ด้วยการเรียกฟังก์ชันทันที

ดังนั้น ใส่อัฒภาคเสมอ-เสมอ ก่อนเรียกฟังก์ชันทันที แม้ว่า ในขณะนี้คุณจะมั่นใจว่า จะไม่มีปัญหา แต่ปัญหาอาจเกิดขึ้นในภายหลัง

ลองนำสิ่งที่กล่าวมาข้างต้นไปใช้และเรียกฟังก์ชัน ทันที โดยใส่อัฒภาคไว้ด้านหน้า:

javascript;(function() {
  console.log(1); // แสดง 1
})();
Задание 1

ลองกำหนดโดยไม่รันโค้ด ว่าจะแสดงอะไร ในคอนโซล:

javascriptlet str = 'str';

(function() {
  console.log(1);
})();
Задание 2

ลองกำหนดโดยไม่รันโค้ด ว่าจะแสดงอะไร ในคอนโซล:

javascriptlet str = 'str'

(function() {
  console.log(1);
})();