ฉันได้อ่านโหมด JavaScript ที่เข้มงวดหลายครั้งและบางคนพูดว่า "ปิดการใช้งานด้วยคำสั่ง" ในอดีตฉันเห็นสิ่งนี้ทั้งหมดโดยการขี่ม้าและดูดอกไม้และผ่านไปเพราะฉันไม่ค่อยใช้คำพูดนี้ในเวลาปกติดังนั้นมันจึงไม่เกี่ยวข้องกับตัวเองมากนัก วันนี้ฉันไม่สามารถช่วยได้ แต่สงสัยว่าทำไม "โมเดลที่เข้มงวด" ไม่สามารถทนได้ด้วยคำสั่ง
ข้อกำหนดของ ECMASCRIPT กล่าวว่า "คำสั่งที่ใช้เพื่อตั้งค่าขอบเขตของรหัสในวัตถุเฉพาะ" จะเห็นได้ว่าด้วยคำสั่งเปลี่ยนห่วงโซ่ขอบเขต
ฟังก์ชั่นบุคคล (ชื่อ, อายุ, เพศ) {this.name = name; this.age = age; this.sex = sex;} (ฟังก์ชั่น () {var title = 'ผู้สมัคร:'; var zhangsan = บุคคลใหม่ ('จางซาน', 20, 'ชาย') ตำแหน่ง '+job;} console.log (str);}) ();รหัสข้างต้นจะรายงานการอ้างอิงที่ไม่ได้รับการตรวจสอบ: งานไม่ได้กำหนด
หากมีการเปลี่ยนบล็อกคำสั่งข้างต้นเป็น
str = title+zhangsan.name+', อายุ'+Zhangsan.age+'ปี,'+Zhangsan.sex+'Sex'+', ตำแหน่ง'+Zhangsan.job;
ไม่มีข้อผิดพลาดผลลัพธ์คือ: ผู้สมัคร: จางซานอายุ 20 ปีชายตำแหน่งที่ไม่ได้กำหนด
สำหรับตัวแปรในบล็อกคำสั่งเมื่อดำเนินการคุณต้องตรวจสอบว่าคุณสมบัติของพวกเขาอยู่ในจางซานหรือไม่
เรารู้ว่าเมื่อเรียกใช้สคริปต์มีสองกระบวนการที่จำเป็นต้องคอมไพล์ก่อนแล้วจึงดำเนินการ
เห็นได้ชัดว่าเมื่อรวบรวมมันเป็นไปไม่ได้ที่จะกำหนดคุณสมบัติของวัตถุที่แสดงโดยตัวแปรนี้ของจางที่มี สามารถพิจารณาได้ว่าจางซานเป็นตัวอย่างของบุคคลเมื่อดำเนินการ ดังนั้นจึงไม่สามารถเป็นจริงได้ว่าตัวแปรในบล็อกคำสั่งด้วยเป็นคุณสมบัติของจางหรือตัวแปรในห่วงโซ่ขอบเขตตัวแปรก่อนหน้าในระหว่างการรวบรวม
สิ่งนี้ขัดแย้งกับความจริงที่ว่าตัวแปรถูกกำหนดเมื่อรวบรวมโหมดที่เข้มงวดดังนั้นโหมดที่เข้มงวดไม่อนุญาตให้มีความแตกต่าง ดังนั้นจึงไม่ยากที่จะเข้าใจว่าคำสั่งนั้นถูกปิดใช้งานในโหมดที่เข้มงวด