1. สายโซ่ขอบเขตของฟังก์ชัน JavaScript แบ่งออกเป็นสายโซ่ขอบเขตเวลานิยามและสายโซ่ขอบเขตรันไทม์
2. เมื่อฟังก์ชันถูกกำหนดไว้ จะมีแอตทริบิวต์ [[ขอบเขต]] ระบุห่วงโซ่ขอบเขตคำจำกัดความ [[ขอบเขต]] เป็นไปตามกฎต่อไปนี้: ห่วงโซ่ขอบเขตคำจำกัดความของฟังก์ชัน [[ ขอบเขต]] จะเป็น ห่วงโซ่ขอบเขตการดำเนินการของฟังก์ชันภายนอกที่ตั้งอยู่
3. ห่วงโซ่ขอบเขตคำจำกัดความของฟังก์ชันโกลบอลประกอบด้วยแอตทริบิวต์ของหน้าต่างเท่านั้น
4. เมื่อฟังก์ชันถูกดำเนินการ สายโซ่ขอบเขตจะถูกผลักเข้าไปในวัตถุที่ใช้งานปัจจุบันที่ส่วนหัวของสายโซ่ขอบเขตเสมอเมื่อมีการกำหนด (ประกอบด้วยสิ่งนี้ อาร์กิวเมนต์ พารามิเตอร์ และตัวแปรท้องถิ่น)
5. เมื่อฟังก์ชันถูกดำเนินการ การกำหนดแอดเดรสของตัวแปรจะถูกค้นหาจากด้านบนของห่วงโซ่ขอบเขตลงมาเสมอ ดังนั้น ความเร็วในการระบุแอดเดรสของตัวแปรโกลบอลจึงช้าที่สุด
6. เมื่อฟังก์ชันภายในถูกดำเนินการ เขายังคงสามารถเข้าถึงขอบเขตขอบเขตที่สมบูรณ์ได้ นี่คือสาเหตุที่การปิดสามารถเข้าถึงตัวแปรที่กำหนดโดยฟังก์ชันภายนอกที่เสร็จสมบูรณ์ในขณะรันไทม์
7. เมื่อพบคำสั่ง with ในระหว่างการทำงานของฟังก์ชัน คุณลักษณะทั้งหมดของวัตถุที่ระบุด้วยจะถูกผลักไปที่ด้านบนของห่วงโซ่ขอบเขตชั่วคราวเป็นด้านบนของห่วงโซ่ขอบเขต
8. เมื่อการทำงานของฟังก์ชันพบกับ catch วัตถุข้อผิดพลาดที่ระบุโดย catch จะถูกผลักไปที่ด้านบนของห่วงโซ่ขอบเขตชั่วคราวเป็นด้านบนของห่วงโซ่ขอบเขต
เรามายกตัวอย่างและวาดห่วงโซ่ขอบเขตเพื่อทำความเข้าใจให้ลึกซึ้งยิ่งขึ้น:
มีโค้ดดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่นกำหนดกิจกรรม(){
var id = "xdi9592";
document.getElementById("save-btn").onclick = function(event){
บันทึกเอกสาร(id);
-
-
เรียกการปิดแบบไม่ระบุชื่อที่สร้างโดยฟังก์ชันนี้ ปิด และวาดรูปต่อไปนี้เพื่อแสดงห่วงโซ่ขอบเขตเมื่อมีการดำเนินการ มอบหมายEvent และห่วงโซ่ขอบเขตเมื่อมีการกำหนดการปิด: