ขอบเขตของตัวแปรหมายถึงการมองเห็นของตัวแปร ในขณะที่วงจรชีวิต (ช่วงการอยู่รอด) จะตรวจสอบตัวแปรจากมุมมองอื่น
ขอบเขตของตัวแปรใน JS แบ่งออกเป็นตัวแปรส่วนกลางและตัวแปรท้องถิ่น ตัวแปรที่กำหนดภายในฟังก์ชันเรียกว่าตัวแปรท้องถิ่น และตัวแปรที่กำหนดภายนอกฟังก์ชันเรียกว่าตัวแปรส่วนกลาง ("สิ่งที่อยู่นอกฟังก์ชันเรียกว่าตัวแปรโกลบอล" มีความสัมพันธ์กัน สมมติฐานที่กล่าวถึงในที่นี้คือตัวแปรที่ประกาศอย่างชัดเจนด้วย var ตัวแปรที่กำหนดโดยไม่มี var ภายในฟังก์ชันจะเป็นตัวแปรโกลบอลตามค่าเริ่มต้น แน่นอนว่าการประกาศตัวแปรโดยไม่มี var นั้นเป็นเรื่องที่ขมวดคิ้ว ).
คัดลอกรหัสรหัสดังต่อไปนี้:
var glob = 4; // ประกาศตัวแปรโกลบอลนอกฟังก์ชัน
ฟังก์ชั่นสนุก () {
var height = 20; //การประกาศ var ในฟังก์ชันเป็นตัวแปรท้องถิ่น
น้ำหนัก = 50; // สิ่งที่ประกาศโดยไม่มี var ในฟังก์ชันคือตัวแปรโกลบอล
-
สนุก();
การแจ้งเตือน(น้ำหนัก);
ไม่มีขอบเขตระดับบล็อกใน JS ซึ่งล้อมรอบด้วยเครื่องหมายปีกกา {} มีในภาษาจาวา เขียนโค้ดต่อไปนี้ในเมธอดหลัก
คัดลอกรหัสรหัสดังต่อไปนี้:
โมฆะคงสาธารณะ main (String... args) {
สำหรับ(int i=0;i<5;i++) {
-
-
อินท์เจ=10;
-
อินท์ z = 20;
System.out.println(i); // i มองไม่เห็น จะมีการรายงานข้อผิดพลาดระหว่างการวิเคราะห์ไวยากรณ์ กล่าวคือ การคอมไพล์จะไม่ผ่าน
System.out.println(j); // j ไม่สามารถมองเห็นได้ และข้อผิดพลาดจะถูกรายงานในระหว่างการวิเคราะห์ไวยากรณ์ กล่าวคือ การคอมไพล์จะไม่ผ่าน
System.out.println(z); // z มองเห็นได้, เอาต์พุต 20
-
แต่ถ้าใน JS
คัดลอกรหัสรหัสดังต่อไปนี้:
สำหรับ (var i=0;i<5;i++) {
-
var obj = {ชื่อ: "ลิลลี่"};
สำหรับ (var attr ใน obj) {
-
-
วาร์ j=10;
-
alert(i);//Output 4, ไม่มีขอบเขตระดับบล็อก
alert(attr); //ชื่อเอาท์พุต ไม่มีขอบเขตระดับบล็อก
alert(j);//Output 10, ไม่มีขอบเขตระดับบล็อก
สิ่งนี้ยังแสดงให้เห็นถึงปัญหาอีกด้วย หลีกเลี่ยงการใช้ for ลูปขณะประกาศตัวแปรในขอบเขตส่วนกลาง ไม่เช่นนั้นจะทำให้เกิดมลภาวะต่อขอบเขตการตั้งชื่อส่วนกลาง
แน่นอนว่า JS1.7 เสนอคีย์เวิร์ด let เพื่อประกาศตัวแปร (ดู https://developer.mozilla.org/cn/New_in_JavaScript_1.7) ซึ่งใช้กับขอบเขตของคำสั่ง for เท่านั้น
คัดลอกรหัสรหัสดังต่อไปนี้:
สำหรับ (ให้ i=0;i<5;i++) {
//สิ่งที่ต้องทำ
-
alert(i);//เกิดข้อผิดพลาดขณะทำงาน ซึ่งบ่งชี้ว่า i ไม่ได้ถูกกำหนดไว้
ต้องมีการอ้างอิง JS1.7 เช่นนี้ <script type="application/javascript;version=1.7"/></script>
PS: firefox2+ ใช้ JS1.7