เมื่อคุณสามารถใช้ตัวแปร JavaScript ก่อนที่จะประกาศได้ เรียกว่าทำด้วยเทคนิค Hoisting (การยกขึ้น) พาร์เซอร์อ่านฟังก์ชันทั้งหมดก่อนรันจริง
พฤติกรรมที่ตัวแปรปรากฏว่าถูกใช้ก่อนการประกาศ เรียกว่า Hoisting:
points = 200; var points;
โค้ดข้างต้นทำงานเหมือนกับ:
var points; points = 200;
รายละเอียด Hoisting
- มีเพียง การประกาศ (declaration) ที่ถูกยกขึ้น — การกำหนดค่า (initialization) ไม่ถูกยกขึ้น
varถูก hoisted และ initialize ด้วยundefinedอัตโนมัติlet/constถูก hoisted แต่อยู่ใน Temporal Dead Zone (TDZ) — เข้าถึงก่อนประกาศได้ReferenceError- Function Declaration ถูก hoisting ทั้งฟังก์ชัน (รวม body)
- Function Expression / Arrow Function ไม่ถูก hoisting (เพียงตัวแปรที่ hoisted)
แนวทางปฏิบัติ: ประกาศตัวแปรด้านบนสุดของ scope เสมอ ใช้ let/const แทน var