ตัวแปรที่ประกาศโดย Let และ Const นั้นใช้ได้ภายในบล็อกรหัสเท่านั้น
{ให้ a = 10; var b = 1;} a // referienceRror: A ไม่ได้กำหนดไว้ B // 1ไม่มีโปรโมชั่นตัวแปร
ตัวแปรจะต้องใช้หลังจากการประกาศมิฉะนั้นจะมีการรายงานข้อผิดพลาด
var tmp = 123; ถ้า (จริง) {tmp = 'abc'; // ReferenceRorlet tmp;}ไม่อนุญาตให้มีข้อความซ้ำ ๆ
// ฟังก์ชันข้อผิดพลาด () {ให้ a = 10; var a = 1;}ขอบเขตระดับบล็อก
ฟังก์ชั่น f () {console.log ('ฉันอยู่ข้างนอก!'); } (function () {ถ้า (false) {// ทำซ้ำฟังก์ชันฟังก์ชัน f () {console.log ('ฉันอยู่ข้างใน!');}} f ();} ()); // ฉันอยู่ข้างใน! โปรโมชั่นฟังก์ชั่น ES5 // ฉันอยู่ข้างนอก! ขอบเขตระดับบล็อก ES6คำสั่ง const
ประกาศค่าคงที่แบบอ่านอย่างเดียว เมื่อประกาศแล้วค่าคงที่ของค่าคงที่จะไม่สามารถเปลี่ยนแปลงได้
เมื่อมีการประกาศตัวแปรแล้วจะต้องเริ่มต้นทันทีและไม่สามารถปล่อยให้ได้รับการกำหนดในภายหลัง
ตัวแปรทั่วโลกที่ประกาศโดย LET Command, Command และ Command Class ไม่ได้อยู่ในคุณสมบัติของวัตถุทั่วโลก
var a = 1; // ถ้าอยู่ในสภาพแวดล้อมการแก้ไขของโหนดสามารถเขียนเป็น global.a // หรือใช้วิธีการทั่วไปสามารถเขียนได้เป็น this.awindow.a // 1let b = 1; window.b // undefined
ต่อไปฉันจะแนะนำคำสั่ง const ของ ES6 ให้คุณแยกกัน
JS ซึ่งมีศูนย์กลางอยู่ที่ ECMA มาก่อนไม่เคยมีแนวคิดเรื่องค่าคงที่และ ES6 ได้สร้างขึ้นสำหรับข้อบกพร่องนี้
const foo = 'foo'; foo = 'bar'; // typeError: การกำหนดให้กับตัวแปรคงที่
ตัวอย่างข้างต้นประกาศค่าคงที่ของประเภทพื้นฐาน หากคุณพยายามแก้ไขค่าเริ่มต้นจะมีการรายงานข้อผิดพลาด หากเป็นค่าของประเภทการอ้างอิงก็จะใช้ แต่สิ่งหนึ่งที่ต้องให้ความสนใจเป็นตัวอย่าง:
const foo = []; foo = [1]; // การกำหนดให้กับตัวแปรคงที่
ข้อผิดพลาดปกติไม่มีปัญหาดูอีกครั้ง:
const foo = [1,2,3]; foo [1] = 4; console.log (foo) // [1, 4, 3]
เหตุใดจึงไม่มีข้อผิดพลาดในเรื่องนี้? และสามารถแก้ไขได้สำเร็จหรือไม่? ความแตกต่างระหว่างตัวอย่างทั้งสองนี้คืออดีตได้เปลี่ยนเนื้อหาที่เกี่ยวข้องของตัวชี้ (จำเป็นต้องคุ้นเคยกับประเภทอ้างอิง JS) และส่วนหลังยังไม่ได้เปลี่ยนการชี้ แต่เนื้อหาของวัตถุชี้เปลี่ยนไป สำหรับ Foo ฉันเป็นเพียงตัวชี้ที่รับผิดชอบในการชี้ไปที่วัตถุที่เกี่ยวข้อง สำหรับเนื้อหาของวัตถุฉันไม่สนใจธุรกิจของฉันดังนั้นฉันจึงสามารถแก้ไขได้ หากฉันไม่ต้องการให้เนื้อหาเปลี่ยนฉันสามารถใช้วิธีอื่นได้
const foo = object.freeze ([1,2,3]); foo [1] = 4; console.log (foo) // [1, 2, 3]
วิธีนี้คุณไม่ต้องกังวลเกี่ยวกับการแก้ไข