เมื่อเปรียบเทียบกับ C/C ++, For Loop ใน Ecmascript ไม่สามารถสร้างบริบทท้องถิ่นได้
การคัดลอกรหัสมีดังนี้:
สำหรับ (var k ใน {a: 1, b: 2}) {
การแจ้งเตือน (k);
-
การแจ้งเตือน (k); // แม้ว่าลูปจะสิ้นสุดลงตัวแปร K ยังอยู่ในขอบเขตปัจจุบัน
เมื่อใดก็ได้ตัวแปรสามารถประกาศได้โดยใช้คำหลัก VAR เท่านั้น
คำสั่งงานที่ได้รับมอบหมายด้านบน:
a = 10;
นี่เป็นเพียงการสร้างคุณสมบัติใหม่สำหรับวัตถุทั่วโลก (แต่ไม่ใช่ตัวแปร) "ไม่ใช่ตัวแปร" ไม่ได้หมายความว่ามันไม่สามารถเปลี่ยนแปลงได้ แต่หมายความว่ามันไม่สอดคล้องกับแนวคิดตัวแปรในข้อกำหนด ECMASCript ดังนั้นมันจึงเป็น "ไม่ใช่ตัวแปร" (เหตุผลที่มันสามารถกลายเป็นคุณสมบัติของวัตถุระดับโลกได้ทั้งหมดเพราะมีวัตถุระดับโลกใน JavaScript
มาดูตัวอย่างง่ายๆเพื่อแสดงให้เห็นถึงปัญหา
การคัดลอกรหัสมีดังนี้:
ถ้า (! ("a" ในหน้าต่าง)) {
var a = 1;
-
การแจ้งเตือน (a);
ก่อนอื่นตัวแปรทั่วโลกทั้งหมดเป็นคุณสมบัติของหน้าต่างและคำสั่ง var a = 1; เทียบเท่ากับ window.a = 1;
คุณสามารถใช้วิธีการต่อไปนี้เพื่อตรวจสอบว่ามีการประกาศตัวแปรทั่วโลกหรือไม่
"ชื่อตัวแปร" ในหน้าต่าง
ประการที่สองการประกาศตัวแปรทั้งหมดอยู่ที่ด้านบนของขอบเขตขอบเขตดูตัวอย่างที่คล้ายกัน:
การคัดลอกรหัสมีดังนี้:
การแจ้งเตือน ("A" ในหน้าต่าง);
var a;
ในเวลานี้แม้ว่าการประกาศจะเกิดขึ้นหลังจากการแจ้งเตือนการแจ้งเตือนจะปรากฏขึ้นยังคงเป็นจริงเนื่องจากเอ็นจิ้น JavaScript จะกวาดประกาศตัวแปรทั้งหมดก่อนแล้วจึงย้ายการประกาศตัวแปรเหล่านี้ไปด้านบน เอฟเฟกต์รหัสสุดท้ายมีดังนี้:
การคัดลอกรหัสมีดังนี้:
var a;
การแจ้งเตือน ("A" ในหน้าต่าง);
ประการที่สามคุณต้องเข้าใจความหมายของคำถามคือการประกาศตัวแปรเป็นขั้นสูง แต่การกำหนดตัวแปรไม่ได้เนื่องจากรหัสบรรทัดนี้รวมถึงการประกาศตัวแปรและการกำหนดตัวแปร
คุณสามารถแยกคำสั่งเป็นรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
var a; // คำแถลง
a = 1; // เริ่มต้นการมอบหมาย
ดังนั้นเพื่อสรุปเมื่อมีการใช้การประกาศตัวแปรและการกำหนดร่วมกันเครื่องยนต์ JavaScript จะแบ่งออกเป็นสองส่วนโดยอัตโนมัติเพื่อเลื่อนการประกาศตัวแปร ขั้นตอนของการมอบหมายไม่ล่วงหน้าเนื่องจากอาจส่งผลกระทบต่อการดำเนินการรหัสและบรรลุผลลัพธ์ที่ไม่คาดคิด
รหัสในคำถามเทียบเท่ากับ:
การคัดลอกรหัสมีดังนี้:
var a;
ถ้า (! ("a" ในหน้าต่าง)) {
a = 1;
-
การแจ้งเตือน (a);
จากการวิเคราะห์ตัวอย่างข้างต้นหากมีการประกาศตัวแปรคุณต้องเพิ่ม VAR ก่อนที่ตัวแปรท้องถิ่นที่ประกาศไว้ หากตัวแปรทั่วโลกที่ประกาศคุณไม่สามารถเพิ่ม VAR (เป็นการดีที่สุดที่จะ จำกัด จำนวนตัวแปรส่วนกลางและพยายามใช้ตัวแปรท้องถิ่น)
ต่อไปนี้อธิบายคุณสมบัติหลายประการของการใช้ VAR
การใช้คำสั่ง VAR เพื่อประกาศตัวแปรหลายครั้งไม่เพียงถูกกฎหมาย แต่ยังไม่ทำให้เกิดข้อผิดพลาดใด ๆ
หากการประกาศที่นำกลับมาใช้ใหม่มีค่าเริ่มต้นจะทำหน้าที่เป็นคำสั่งการมอบหมายเท่านั้น
หากการประกาศที่นำกลับมาใช้ใหม่ไม่มีค่าเริ่มต้นจะไม่มีผลกระทบใด ๆ กับตัวแปรดั้งเดิม
ตัวแปรที่ไม่มีการประกาศ VAR มีอยู่เป็นตัวแปรทั่วโลก ตัวแปรที่มีการประกาศ VAR เป็นของตัวแปรท้องถิ่นโดยเฉพาะอย่างยิ่งภายในฟังก์ชั่น และหลังจากการทดสอบมันจะเร็วกว่าที่จะประกาศด้วย VAR มากกว่าที่จะไม่ได้ด้วย VAR ตั้งค่าตัวแปรท้องถิ่นให้มากที่สุดเท่าที่จะเป็นไปได้ในฟังก์ชั่นซึ่งปลอดภัยและรวดเร็วและการดำเนินการของตัวแปรนั้นมีเหตุผลมากกว่าและจะไม่มีข้อผิดพลาดเชิงตรรกะที่เกิดจากการทำงานแบบสุ่มของตัวแปรทั่วโลกในฟังก์ชัน
เป็นการดีที่สุดที่จะใช้วิธีการแบบตัวต่อตัวของวัตถุเมื่อประกาศวัตถุเนื่องจากความเร็วนี้เร็วกว่าวิธีใหม่มาก
ชื่อตัวแปรถูกถ่ายด้วยตัวเอง เพื่อที่จะดูแลความหมายและข้อมูลจำเพาะชื่อตัวแปรอาจยาวขึ้นเล็กน้อย แต่ระวังความยาวของชื่อตัวแปรจะส่งผลต่อความเร็วในการดำเนินการของรหัส การประกาศชื่อตัวแปรยาวไม่เร็วเท่า