Javascript hoisting และการประกาศขอบเขตส่วนกลาง

Aug 21 2020

ใน 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

เหตุใดสิ่งนี้จึงทำให้เกิดข้อผิดพลาดในการอ้างอิงและไม่ระบุ?

คำตอบ

1 AbhishekJain Aug 21 2020 at 14:19

หากคุณพิจารณาสองกรณีแรกอย่างรอบคอบคุณจะประกาศตัวแปรอยู่เสมอaและใน JavaScript จะมีเพียงการประกาศเท่านั้น

ดังที่กล่าวไว้ในของคุณไม่เคยประกาศCase 3ตัวแปรaดังนั้นจึงไม่สามารถชักรอกได้ที่นี่ กับที่มีตัวแปรตามชื่อไม่อยู่ในขอบเขตและด้วยเหตุนี้aReferenceError

หากคุณดูคำอธิบายของReferenceErrorจะอ่านว่า:

อ็อบเจ็กต์ ReferenceError แสดงถึงข้อผิดพลาดเมื่อมีการอ้างอิงตัวแปรที่ไม่มีอยู่จริง

1 Quentin Aug 21 2020 at 14:12

globals โดยนัยไม่ได้หมายความถึงvarคำสั่ง ไม่มีการชักรอกของพวกเขา