JavaScript มีแนวคิดเช่นขอบเขต (ขอบเขต), ขอบเขตโซ่ (โซ่ขอบเขต), บริบทดำเนินการ (บริบทการดำเนินการ), วัตถุที่ใช้งานอยู่ (วัตถุที่ใช้งานอยู่), ขอบเขตไดนามิก (ขอบเขตไดนามิก) และการปิด (ปิด) เพื่อให้เข้าใจแนวคิดเหล่านี้เราวิเคราะห์พวกเขาจากทั้งด้านคงที่และแบบไดนามิก
ก่อนอื่นมาเขียนฟังก์ชั่นง่ายๆเพื่อสร้างตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นเพิ่ม (num1, num2) {
var sum = num1 + num2;
ผลรวมกลับ;
-
เรากำหนดฟังก์ชั่นเพิ่มด้วยพารามิเตอร์อย่างเป็นทางการสองตัว
ลักษณะคงที่:
เมื่อสร้างฟังก์ชั่น ADD เอ็นจิ้น JavaScript จะสร้างห่วงโซ่ขอบเขตของฟังก์ชั่น ADD และขอบเขตโซ่นี้ชี้ไปที่บริบททั่วโลก หากคุณใช้การแสดงแบบกราฟิกรูปต่อไปนี้จะแสดง:
ดังที่เห็นได้จากรูปด้านบนเมื่อมีการสร้างฟังก์ชั่น ADD แล้วโซ่ขอบเขตได้ถูกสร้างขึ้นดังนั้นเราจึงสามารถสรุปได้ว่าห่วงโซ่ขอบเขตของฟังก์ชั่นถูกสร้างขึ้นเมื่อสร้างฟังก์ชั่นแทนที่จะเป็นช่วงเวลาการทำงานแบบไดนามิก มาดูกันว่าจะเกิดอะไรขึ้นระหว่างการวิ่งแบบไดนามิก
ด้านแบบไดนามิก:
เมื่อดำเนินการฟังก์ชั่นเพิ่ม JavaScript จะสร้างบริบทการดำเนินการซึ่งมีข้อมูลทั้งหมดที่จำเป็นในระหว่างการรันไทม์ของฟังก์ชั่นเพิ่ม บริบทดำเนินการยังมีห่วงโซ่ขอบเขตของตัวเอง เมื่อฟังก์ชั่นกำลังทำงานเอ็นจิ้น JavaScript จะเริ่มต้นโซ่ขอบเขตของบริบทการดำเนินการจากห่วงโซ่ขอบเขตของฟังก์ชั่น ADD จากนั้นเอ็นจิ้น JavaScript จะสร้างวัตถุที่ใช้งานอยู่ซึ่งมีตัวแปรท้องถิ่นทั้งหมดพารามิเตอร์และตัวแปรนี้และตัวแปรอื่น ๆ ในระหว่างการรันไทม์ฟังก์ชั่น
หากมีการอธิบายภาพสิ่งที่เกิดขึ้นในระหว่างการทำงานแบบไดนามิกของฟังก์ชัน Add จะสามารถอธิบายได้ในรูปต่อไปนี้:
ดังที่เห็นได้จากตัวเลขด้านบนบริบทการดำเนินการเป็นแนวคิดแบบไดนามิก มันถูกสร้างขึ้นเมื่อฟังก์ชั่นกำลังทำงาน ในเวลาเดียวกันวัตถุที่ใช้งานอยู่ก็เป็นแนวคิดแบบไดนามิก มันถูกอ้างอิงโดยห่วงโซ่ขอบเขตของบริบทการดำเนินการ ดังนั้นจึงสามารถสรุปได้ว่าทั้งบริบทการดำเนินการและวัตถุที่ใช้งานอยู่เป็นแนวคิดแบบไดนามิกและขอบเขตขอบเขตของบริบทการดำเนินการจะเริ่มต้นโดยห่วงโซ่ขอบเขตฟังก์ชัน
ข้างต้นพูดถึงขอบเขตของขอบเขตฟังก์ชันและบริบทการดำเนินการ มาพูดคุยเกี่ยวกับปัญหาของขอบเขตแบบไดนามิก เมื่อ JavaScript ผ่านด้วยคำสั่งให้ลองใช้คำสั่งจับและวิธีการประเมินแล้วเอ็นจิ้น JavaScript จะเปลี่ยนขอบเขตของบริบทการดำเนินการแบบไดนามิก มาดูตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น initui () {
ด้วย (เอกสาร) {// หลีกเลี่ยง!
var bd = ร่างกาย
links = getElementsByTagname ("a")
i = 0,
len = links.length;
ในขณะที่ (i <len) {
อัปเดต (ลิงก์ [i ++]);
-
getElementById ("go-btn"). onclick = function () {
เริ่ม();
-
bd.className = "ใช้งาน";
-
เมื่อดำเนินการฟังก์ชั่น INITUI ข้างต้น JavaScript จะสร้างขอบเขตที่สอดคล้องกันแบบไดนามิกที่สอดคล้องกับคำสั่งด้วยและวางไว้ที่ส่วนหน้าของห่วงโซ่ขอบเขตบริบทการดำเนินการ กระบวนการข้างต้นสามารถอธิบายได้อย่างชัดเจนผ่านรูปด้านล่าง พื้นที่ที่ทำเครื่องหมายสีแดงด้านล่างแสดงขอบเขตที่สร้างขึ้นโดยคำสั่งพร้อม
ในที่สุดลองมาดูการปิดที่ลึกลับที่สุดใน JavaScript การปิดเป็นฟังก์ชั่นใน JavaScript การปิดจะถูกสร้างขึ้นในระหว่างการทำงานของฟังก์ชั่น ลองมาเป็นตัวอย่างเพื่อดู:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นกำหนด () {
var id = "xdi9592";
document.getElementById ("save-btn"). onclick = function (เหตุการณ์) {
Savedocument (ID);
-
-
เมื่อมีการดำเนินการฟังก์ชันที่กำหนดไว้ข้างต้นการปิดจะถูกสร้างขึ้นและการปิดนี้จะอ้างถึงตัวแปร ID ในขอบเขตของ AssignEvents หากตามภาษาการเขียนโปรแกรมแบบดั้งเดิม ID เป็นตัวแปรที่เก็บไว้ในสแต็ก เมื่อฟังก์ชั่นถูกเรียกใช้งาน ID จะหายไปดังนั้นจะมีการอ้างอิงอีกครั้งได้อย่างไร? เห็นได้ชัดว่า JavaScript ใช้วิธีอื่นที่นี่ มาดูกันว่า JavaScript ดำเนินการปิดอย่างไร เมื่อดำเนินการฟังก์ชั่นที่ได้รับมอบหมายเอ็นจิ้น JavaScript จะสร้างห่วงโซ่ขอบเขตของบริบทการดำเนินการของฟังก์ชันที่ได้รับมอบหมาย โซ่ขอบเขตนี้มีวัตถุที่ใช้งานอยู่เมื่อมีการเรียกใช้งานที่กำหนด ในเวลาเดียวกันเอ็นจิ้น JavaScript จะสร้างการปิดและห่วงโซ่ขอบเขตของการปิดจะอ้างถึงวัตถุที่ใช้งานอยู่เมื่อมีการดำเนินการที่กำหนด ด้วยวิธีนี้เมื่อมีการดำเนินการที่ได้รับมอบหมายแม้ว่าขอบเขตของห่วงโซ่ของบริบทการดำเนินการของตัวเองจะไม่หมายถึงวัตถุที่ใช้งานอีกต่อไปการปิดยังคงหมายถึงวัตถุที่ใช้งานที่สอดคล้องกับรันไทม์ที่ได้รับมอบหมายซึ่งอธิบายกลไกการปิดภายในจาวาสคริปต์ คุณสามารถใช้ตัวเลขต่อไปนี้เพื่ออธิบายสถานการณ์ของฟังก์ชันที่กำหนดไว้ข้างต้นรันไทม์:
ดังที่เห็นได้จากด้านบนหลังจากฟังก์ชั่นที่ได้รับมอบหมายจะถูกดำเนินการแล้ว Document.getElementById ("Save-BTN") OnClick หมายถึงการปิด ด้วยวิธีนี้เมื่อผู้ใช้คลิกบันทึก -btn การดำเนินการของการปิดจะถูกทริกเกอร์ ลองมาดูสถานการณ์เมื่อมีการดำเนินการปิด ดังที่ได้กล่าวไว้ก่อนหน้านี้การปิดใน JavaScript เป็นฟังก์ชั่นจริงดังนั้นสถานการณ์ของการดำเนินการปิดและการดำเนินการฟังก์ชั่นจึงสอดคล้องกัน รูปต่อไปนี้จะอธิบายการปิดที่เกี่ยวข้องกับเหตุการณ์ onclick ข้างต้นอย่างชัดเจน
จากรูปด้านบนเราจะเห็นว่าเครื่องยนต์ JavaScript สร้างบริบทการดำเนินการของการปิดจากนั้นใช้โซ่ขอบเขตการปิดเพื่อเริ่มต้นขอบเขตการดำเนินการตามขอบเขตของการปิดและในที่สุดก็ทำให้การปิดการปิดการปิด