ตัวแปร JavaScript ที่สามารถอยู่ในขอบเขตท้องถิ่นหรือระดับโลก
ตัวแปรเอกชนสามารถทำไปได้ด้วยการปิด
ตัวแปรทั่วโลก
ฟังก์ชั่นสามารถเข้าถึงตัวแปรทั้งหมดที่กำหนดไว้ในฟังก์ชันเช่นนี้
แต่ฟังก์ชั่นยังสามารถเข้าถึงตัวแปรที่กำหนดไว้นอกฟังก์ชั่นเช่นนี้
ในตัวอย่างที่ผ่านมาเป็นตัวแปรทั่วโลก
ในหน้าเว็บตัวแปรทั่วโลกอยู่ในวัตถุหน้าต่าง
ตัวแปรทั่วโลกสามารถนำมาใช้ (และมีการเปลี่ยนแปลง) โดยสคริปต์ทั้งหมดในหน้า (และในหน้าต่าง)
ในตัวอย่างแรกเป็นตัวแปรท้องถิ่น
ตัวแปรท้องถิ่นสามารถนำมาใช้เฉพาะภายในฟังก์ชั่นที่มีการกำหนดไว้ มันถูกซ่อนจากฟังก์ชั่นอื่น ๆ และรหัสสคริปต์อื่น ๆ
ตัวแปรสากลและในพื้นที่ที่มีชื่อเดียวกันเป็นตัวแปรที่แตกต่างกัน การปรับเปลี่ยนอย่างใดอย่างหนึ่งไม่ได้ปรับเปลี่ยนอื่น ๆ
ตัวแปรที่สร้างขึ้นโดยไม่ต้อง var คำหลักอยู่เสมอทั่วโลกถึงแม้ว่าพวกเขาจะถูกสร้างขึ้นภายในฟังก์ชั่น
อายุการใช้งานตัวแปร
ตัวแปรทั่วโลกอาศัยอยู่ตราบเท่าที่ใบสมัครของคุณ (หน้าต่างของคุณ / หน้าเว็บของคุณ) ชีวิต
ตัวแปรท้องถิ่นมีชีวิตสั้น พวกเขาถูกสร้างขึ้นเมื่อฟังก์ชั่นที่มีการอุทธรณ์และฟังก์ชั่นลบเมื่อเสร็จสิ้น
เคาเตอร์ Dilemma
สมมติว่าคุณต้องการใช้ตัวแปรสำหรับการนับบางสิ่งบางอย่างและคุณต้องการนับนี้จะพร้อมใช้งานฟังก์ชั่นทั้งหมด
คุณสามารถใช้ตัวแปรทั่วโลกและฟังก์ชั่นเพื่อเพิ่มเคาน์เตอร์:
ตัวอย่าง
var counter = 0;
function add() {
counter += 1;
}
add();
add();
add();
// the counter is now equal to 3
ลองตัวเอง» เคาน์เตอร์ควรจะมีการเปลี่ยนแปลงโดย add() ฟังก์ชั่น
ปัญหาคือว่าสคริปต์ใด ๆ บนหน้าเว็บสามารถเปลี่ยนเคาน์เตอร์โดยไม่ต้องโทร add()
ถ้าผมประกาศเคาน์เตอร์ภายในฟังก์ชั่นที่ไม่มีใครจะสามารถมีการเปลี่ยนแปลงได้โดยไม่ต้องเรียกเพิ่ม ():
ตัวอย่าง
function add() {
var counter = 0;
counter += 1;
}
add();
add();
add();
// the counter should now be 3, but it does not work !
ลองตัวเอง» มันไม่ทำงาน! เวลาที่ผมเรียกว่าทุก add() ฟังก์ชั่นเคาน์เตอร์ถูกกำหนดเป็น 1
ฟังก์ชั่นภายในงาน JavaScript สามารถแก้ปัญหานี้
ฟังก์ชั่นจาวาสคริปต์ที่ซ้อนกัน
ฟังก์ชั่นทุกคนสามารถเข้าถึงขอบเขตทั่วโลก
ในความเป็นจริงใน JavaScript, ฟังก์ชั่นทุกคนสามารถเข้าถึงขอบเขต "สูงกว่า" พวกเขา
JavaScript สนับสนุนการทำงานที่ซ้อนกัน ฟังก์ชั่นที่ซ้อนกันมีการเข้าถึงขอบเขต "สูงกว่า" พวกเขา
ในตัวอย่างนี้ฟังก์ชั่นด้าน plus() มีการเข้าถึงตัวแปรเคาน์เตอร์ในการทำงานของผู้ปกครอง:
ตัวอย่าง
function add() {
var counter = 0;
function plus() {counter += 1;}
plus();
return counter;
}
ลองตัวเอง» ซึ่งอาจมีการแก้ไขภาวะที่กลืนไม่เข้าคายไม่ออกเคาน์เตอร์ถ้าเราสามารถเข้าถึง plus() ฟังก์ชั่นจากภายนอก
นอกจากนี้เรายังต้องการที่จะหาวิธีการที่จะดำเนินการนับ = 0 เพียงครั้งเดียว
เราจำเป็นต้องปิด
ปิด JavaScript
โปรดจำไว้ว่าฟังก์ชั่นการเรียกตัวเอง? ฟังก์ชั่นนี้ทำอะไร?
ตัวอย่าง
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
// the counter is now 3
ลองตัวเอง» ตัวอย่างอธิบาย
ตัวแปรเพิ่มมีการกำหนดค่าตอบแทนของฟังก์ชั่นในตัวเองกล่าวอ้าง
ฟังก์ชั่นในตัวเองกล่าวอ้างเพียงทำงานครั้งเดียว มันชุดเคาน์เตอร์ให้เป็นศูนย์ (0) และผลตอบแทนการแสดงออกที่ฟังก์ชั่น
เพิ่มวิธีนี้จะกลายเป็นฟังก์ชั่น ส่วนที่ "ยอดเยี่ยม" ก็คือว่ามันสามารถเข้าถึงเคาน์เตอร์อยู่ในขอบเขตของผู้ปกครอง
นี้เรียกว่าปิด JavaScript. มันทำให้มันเป็นไปได้สำหรับฟังก์ชั่นที่จะมีตัวแปร "ส่วนตัว"
เคาน์เตอร์มีการป้องกันโดยขอบเขตของฟังก์ชั่นที่ไม่ระบุชื่อและสามารถเปลี่ยนแปลงได้โดยใช้ฟังก์ชั่นเพิ่ม
ปิดเป็นฟังก์ชั่นที่มีการเข้าถึงขอบเขตแม่แม้หลังจากที่ฟังก์ชั่นที่ผู้ปกครองได้ปิด