Javascript Hoisting: ขอบคุณสำหรับอะไร
ในฐานะนักพัฒนา JavaScript ฉันแน่ใจว่าคุณทราบดีถึง "ความปิติยินดี" ที่กำลังเพิ่มขึ้น แต่ในกรณีที่คุณต้องการทบทวน การยกขึ้นเป็นลักษณะการทำงานใน JavaScript ที่ตัวแปรและฟังก์ชันจะถูกย้ายไปยังด้านบนสุดของขอบเขตโดยอัตโนมัติก่อนที่จะเรียกใช้โค้ด
ตอนนี้ บางคนอาจแย้งว่าการยกเป็นคุณสมบัติที่มีประโยชน์ ทำให้เราสามารถอ้างอิงตัวแปรและฟังก์ชันก่อนที่จะประกาศในโค้ดของเรา แต่ขอให้เป็นจริงที่นี่: ข้อเสียมีมากกว่าข้อดีเมื่อพูดถึง "คุณสมบัติ" นี้
ปัญหาหลักประการหนึ่งของการชักรอกคืออาจทำให้นักพัฒนามือใหม่เกิดความสับสนอย่างมาก เมื่อคุณเรียนรู้การเขียนโค้ด สิ่งสำคัญคือต้องมีความเข้าใจอย่างถ่องแท้เกี่ยวกับแนวคิดและหลักการที่คุณใช้ การยกเป็นการขัดต่อกฎพื้นฐานของการเขียนโปรแกรม เช่น แนวคิดที่ว่าการประกาศควรมาก่อนการใช้งาน และตัวแปรควรเริ่มต้นก่อนที่จะใช้งาน ซึ่งอาจนำไปสู่ความสับสนและทำให้นักพัฒนาใหม่เข้าใจสิ่งที่เกิดขึ้นในโค้ดของตนได้ยากขึ้น
แต่สำหรับนักพัฒนาที่มีประสบการณ์แล้ว การยกเครื่องอาจเป็นเรื่องน่ารำคาญใจ การพยายามติดตามตัวแปรและฟังก์ชันทั้งหมดในโค้ดของคุณนั้นยากพออยู่แล้ว ไม่ต้องพะวงกับการจัดวางที่สัมพันธ์กับการยก ซึ่งอาจนำไปสู่การเสียเวลาและความยุ่งยากในขณะที่คุณพยายามดีบักโค้ดของคุณ และหาสาเหตุว่าทำไมมันถึงไม่ทำงานตามที่คาดไว้
นอกจากจะสร้างความสับสนและน่าหงุดหงิดแล้ว การยกยังไม่สอดคล้องกันอีกด้วย ดังที่ได้กล่าวไว้ก่อนหน้านี้ การทำงานจะแตกต่างกันไปขึ้นอยู่กับว่าคุณใช้โหมดเข้มงวดหรือไม่ ซึ่งหมายความว่าคุณต้องระมัดระวังเป็นพิเศษเกี่ยวกับวิธีการใช้รอก และคุณอาจต้องเปลี่ยนรหัสขึ้นอยู่กับว่าคุณใช้โหมดเข้มงวดหรือไม่ สิ่งนี้จะเพิ่มความซับซ้อนอีกชั้นหนึ่งให้กับแนวคิดที่สับสนอยู่แล้ว และอาจทำให้การเขียนโค้ดที่เชื่อถือได้และคาดเดาได้ยากขึ้น
สุดท้ายนี้ เป็นที่น่าสังเกตว่า "ข้อดี" ของการยกนั้นค่อนข้างน้อยมาก ใช่ มันช่วยให้เราอ้างอิงตัวแปรและฟังก์ชันก่อนที่จะประกาศในโค้ดของเรา แต่สิ่งนี้มีประโยชน์จริงหรือ ในกรณีส่วนใหญ่ โค้ดจะชัดเจนและอ่านง่ายกว่ามาก หากมีการประกาศก่อนที่จะใช้งาน ซึ่งจะช่วยหลีกเลี่ยงความสับสนและทำให้เข้าใจสิ่งที่เกิดขึ้นในโค้ดได้ง่ายขึ้น
โดยสรุปแล้ว การยกเป็นลักษณะที่น่าสับสนและน่าหงุดหงิดของ JavaScript ซึ่งมีจุดประสงค์เพียงน้อยนิดและทำหน้าที่เพียงทำให้ชีวิตของเราในฐานะนักพัฒนายากขึ้นเท่านั้น แน่นอนว่ามันอาจมีประโยชน์เล็กน้อย แต่ข้อเสียนั้นมีมากกว่านั้นมาก ขอบคุณสำหรับไม่มีอะไรยก
คุณกำลังสร้างเขาวงกตในแบบของคุณเอง และคุณอาจจะหลงเข้าไปในเขาวงกตก็ได้
― Marijn Haverbeke, Eloquent JavaScript: A Modern Introduction to Programming





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)