Javascript hoisting และการประกาศขอบเขตส่วนกลาง
ใน javascript เฟสคอมไพล์จะค้นหาและเชื่อมโยงการประกาศทั้งหมดกับขอบเขตที่เหมาะสม
กรณี 1
a = 2;
console.log(a);
หากไม่ได้ใช้ในโหมดเข้มงวดข้อมูลโค้ดจะถือว่าถูกประมวลผลเป็น:
var a;
a = 2;
console.log(a);
เอาต์พุต: 2
กรณี 2
หากการประกาศเกิดขึ้นด้านล่าง console.log ()
console.log(a);
var a = 2;
ที่บรรทัดที่ 1: คอมไพเลอร์จะตรวจสอบการประกาศของ a ในขอบเขตหากไม่พบขอบเขตส่วนกลางจะกำหนดหนึ่งและรหัสเดียวกันจะถูกสมมติอีกครั้งเหมือนกับ
var a;
console.log(a);
a = 2;
เอาต์พุต: ไม่ได้กำหนด // เนื่องจากไม่มีการกำหนดค่าในขณะที่ล่ามอ่านคอนโซล
กรณี 3
console.log(a);
a = 2;
เอาต์พุต: RefErr
เหตุใดสิ่งนี้จึงทำให้เกิดข้อผิดพลาดในการอ้างอิงและไม่ระบุ?
คำตอบ
หากคุณพิจารณาสองกรณีแรกอย่างรอบคอบคุณจะประกาศตัวแปรอยู่เสมอaและใน JavaScript จะมีเพียงการประกาศเท่านั้น
ดังที่กล่าวไว้ในของคุณไม่เคยประกาศCase 3ตัวแปรaดังนั้นจึงไม่สามารถชักรอกได้ที่นี่ กับที่มีตัวแปรตามชื่อไม่อยู่ในขอบเขตและด้วยเหตุนี้aReferenceError
หากคุณดูคำอธิบายของReferenceErrorจะอ่านว่า:
อ็อบเจ็กต์ ReferenceError แสดงถึงข้อผิดพลาดเมื่อมีการอ้างอิงตัวแปรที่ไม่มีอยู่จริง
globals โดยนัยไม่ได้หมายความถึงvarคำสั่ง ไม่มีการชักรอกของพวกเขา