การชักรอกใน Javascript === รวบรวม?


9

ฉันเจอมุมมองที่น่าสนใจในการสัมภาษณ์งานเมื่อเร็ว ๆ นี้

การยกใน Javascript นั้นเกี่ยวกับการย้ายการประกาศตัวแปรและการประกาศฟังก์ชันที่ด้านบนของสคริปต์ เราสามารถเรียกเฟสนี้เป็นการรวบรวมได้หรือไม่?

ฉันทราบเกี่ยวกับความจริงที่ว่า Javascript interpreter มี 2 การส่งผ่านสคริปต์การป้อนข้อมูลซึ่งในครั้งแรกที่มันผ่านการชักรอกและครั้งที่สองที่มันดำเนินการสคริปต์จริง รู้ว่า Javascript เป็นภาษาที่ตีความคำถามนี้ทำให้ฉันสับสนเล็กน้อย

คำตอบ:


18

ไม่การชักรอกไม่ใช่การรวบรวม

Hoisting เป็นแนวคิดที่สร้างขึ้นโดยนักพัฒนาเพื่ออธิบายสิ่งที่เกิดขึ้นระหว่างการรวบรวมเมื่อตัวแปรและการประกาศฟังก์ชันถูกย้ายไปด้านบนของขอบเขตที่มี

การรวบรวมเป็นสิ่งที่เกิดขึ้นเมื่อโค้ด Javascript ของคุณกลายเป็นการแสดงอื่น ๆ (โดยปกติจะเป็นโค้ดเรียกทำงานบางประเภท) ซึ่งจะถูกเรียกใช้ในตอนนี้หรือหลังจากนั้น เอ็นจิ้น V8 Javascript ของ Chrome นั้นมีคอมไพเลอร์สองตัว หนึ่งในการสร้างรหัสที่ปฏิบัติการได้อย่างรวดเร็วและสกปรกในขณะนี้อื่น ๆ เพื่อสร้างรหัสที่ดีที่สุดในภายหลัง

ภาษาการเขียนโปรแกรมไม่ได้ถูกกำหนดเป็นภาษา "รวบรวม" หรือ "ตีความ" ค่อนข้างแปลภาษาหรือเรียบเรียงได้ตามต้องการ

การอ่านเพิ่มเติมเกี่ยวกับการ
ชักรอกใน Javascript
การทำงานของเครื่องยนต์ V8


1
บทความวิกิพีเดียเกี่ยวกับภาษาที่แปลยังมีประโยชน์สำหรับความแตกต่าง "ตีความ" กับ "รวบรวม": en.wikipedia.org/wiki/Interpreted_language

ถ้าผมเข้าใจนี้อย่างถูกต้อง Hoisting ไม่แปลงสคริปต์เพื่อให้เครื่องอ่านรหัสดังนั้นจึงไม่ได้รวบรวม ฉันถูกไหม? :)
Rahul Desai

อ่านย่อหน้าที่สองของคำตอบของฉันอีกครั้ง
Robert Harvey

1
ในการสนทนาล่าสุดของฉันกับผู้สัมภาษณ์เกี่ยวกับหัวข้อนี้เขาได้ให้ฉันอ้างอิงหลักสูตร Advanced JS ใน FrontendMasters.comโดยที่ Kyle Simpson อธิบายว่ามันเป็นการคอมไพล์ในแง่ที่ว่าถ้าเราเปรียบเทียบกับ Bash scripting เช่นนั้น ไม่ทราบว่าจะเกิดอะไรขึ้นกับบรรทัดที่ # 4 ในขณะที่อยู่บนบรรทัดที่ 3 อย่างไรก็ตามในกรณีของคอมไพเลอร์ JS จะเห็นสิ่งที่อยู่ในบรรทัดที่ 4 ก่อนหน้านี้ในระหว่างการผ่านการชักรอก เพียงว่ามันจะไม่ถูกแปลงเป็นรหัสไบนารีซึ่งแตกต่างจากภาษาอื่น ๆ รวบรวมจาวาสคริปต์ทุกครั้งที่เรียกใช้
ราหุลเดไล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.