เหตุใด JavaScript จึงเพิ่มตัวแปร
อะไรคือเหตุผลของนักออกแบบเมื่อพวกเขาตัดสินใจที่จะใช้งานชักรอก? มีภาษายอดนิยมอื่น ๆ ที่ทำเช่นนี้หรือไม่?
โปรดระบุลิงค์ที่เกี่ยวข้องไปยังเอกสารและ / หรือบันทึก
เหตุใด JavaScript จึงเพิ่มตัวแปร
อะไรคือเหตุผลของนักออกแบบเมื่อพวกเขาตัดสินใจที่จะใช้งานชักรอก? มีภาษายอดนิยมอื่น ๆ ที่ทำเช่นนี้หรือไม่?
โปรดระบุลิงค์ที่เกี่ยวข้องไปยังเอกสารและ / หรือบันทึก
div
ใน jQuery
คำตอบ:
ตามที่ Stoyan Stefanov อธิบายไว้ในหนังสือ "JavaScript Patterns" การชักรอกเป็นผลมาจากการใช้งานตัวแปล JavaScript
การตีความโค้ด JS ดำเนินการในสองรอบ ในระหว่างการส่งครั้งแรกล่ามจะประมวลผลการประกาศตัวแปรและฟังก์ชัน
รหัสผ่านที่สองคือขั้นตอนการเรียกใช้โค้ดจริง ล่ามจะประมวลผลนิพจน์ฟังก์ชันและตัวแปรที่ไม่ได้ประกาศ
ดังนั้นเราสามารถใช้แนวคิด "ชักรอก" เพื่ออธิบายพฤติกรรมดังกล่าว
"var hoisting จึงเป็น [an] ผลลัพธ์ที่ไม่ได้ตั้งใจของการยกฟังก์ชันไม่มีขอบเขตการบล็อก [และ] JS ในฐานะงานเร่งด่วนในปี 1995"
"function hoisting ช่วยให้สามารถแยกโปรแกรมจากบนลงล่าง" let rec "ได้ฟรีโทรก่อนประกาศ; var hoisting ติดแท็ก"
ฉันไม่รู้ภาษายอดนิยมอื่น ๆ ที่ยกตัวแปรในลักษณะเดียวกัน ฉันคิดว่าแม้แต่ ActionScript ซึ่งเป็นการนำ ECMAScript อื่นที่ใช้ในการพัฒนา Flash - ไม่ได้ใช้การชักรอก นี่เป็นที่มาของความสับสนและความยุ่งยากสำหรับนักพัฒนาที่คุ้นเคยกับภาษาอื่น ๆ ที่กำลังเรียนรู้ JavaScript
UPDATE: จากความคิดเห็นที่งูใหญ่มีพฤติกรรม hoisting ตัวแปรที่คล้ายกัน
เนื่องจากตัวแปลจาวาสคริปต์แปลรหัสเป็นสองรอบ
ในรอบที่ 1 การประกาศตัวแปรและฟังก์ชันทั้งหมดจะถูกนำไปที่ด้านบนสุดของขอบเขตฟังก์ชันที่กำลังดำเนินการซึ่งจะช่วยในการสร้างvariableObjects
สำหรับexecution context
การทำงานแม้กระทั่งก่อนที่การดำเนินการของมัน
ในระยะที่ 2 การกำหนดค่าคำสั่งรหัสและการเรียกใช้ฟังก์ชันจะเกิดขึ้นทีละบรรทัดในลักษณะที่คาดไว้
คุณอ่านรายละเอียดเพิ่มเติมได้เล็กน้อย ที่นี่
มันจะทำให้คุณเป็นพฤติกรรมรอบภาพที่ดีขึ้นรอบ ๆlet
, const
และclass
การประกาศยังมีความสำคัญต่อไปนี้มันระหว่างตัวแปรและฟังก์ชั่น