การส่งออกตัวแปรและฟังก์ชันในโมดูลผ่านการปิด (Closures) ใน JavaScript

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

javascript;(function() {
  let str = 'ตัวแปรของโมดูล';
  
  function func() {
    alert('ฟังก์ชันของโมดูล');
  }
})();

ให้เราส่งออกฟังก์ชัน func ของเรา ในการนี้ให้เขียนลงในคุณสมบัติของออบเจกต์ในตัว window ของเบราว์เซอร์:

javascript;(function() {
  let str = 'ตัวแปรของโมดูล';
  
  function func() {
    alert('ฟังก์ชันของโมดูล');
  }
  
  window.func = func;
})();

ตอนนี้เราสามารถเรียกฟังก์ชันของเราจากภายนอกโมดูลได้:

javascript;(function() {
  let str = 'ตัวแปรของโมดูล';
  
  function func() {
    alert('ฟังก์ชันของโมดูล');
  }
  
  window.func = func;
})();

window.func(); // แสดงผล 'ฟังก์ชันของโมดูล'

ทั้งนี้ไม่จำเป็นต้องเรียกฟังก์ชันเป็นคุณสมบัติของออบเจกต์ window เสมอไป:

javascript;(function() {
  let str = 'ตัวแปรของโมดูล';
  
  function func() {
    alert('ฟังก์ชันของโมดูล');
  }
  
  window.func = func;
})();

func(); // แสดงผล 'ฟังก์ชันของโมดูล'
Задание 1

กำหนดให้มีโมดูลต่อไปนี้:

javascript;(function() {
  let str1 = 'ตัวแปรของโมดูล';
  let str2 = 'ตัวแปรของโมดูล';
  let str3 = 'ตัวแปรของโมดูล';
  
  function func1() {
    alert('ฟังก์ชันของโมดูล');
  }
  function func2() {
    alert('ฟังก์ชันของโมดูล');
  }
  function func3() {
    alert('ฟังก์ชันของโมดูล');
  }
})();

ให้ส่งออกตัวแปรหนึ่งตัวและฟังก์ชันใดก็ได้สองฟังก์ชันไปยังภายนอก