Hoisting در جاوااسکریپت

Hoisting در جاوااسکریپت چیست؟

Hoisting یکی از مفاهیم کلیدی در جاوااسکریپت است که رفتار خاصی را در هنگام اجرای کد نشان می‌دهد. این ویژگی به این معناست که اعلان متغیرها و توابع به بالای محدوده فعلی خود منتقل می‌شوند، حتی اگر در کد پایین‌تر تعریف شده باشند.

توجه کنید که فقط اعلان‌ها (Declarations) Hoist می‌شوند، نه مقداردهی‌ها (Initializations).

نمونه‌های عملی Hoisting

مثال متغیر با var:

console.log(x); // undefined
var x = 5;
        

در مثال بالا، به دلیل Hoisting، متغیر x اعلان شده اما مقداردهی نشده است. این رفتار با let و const متفاوت است که باعث ایجاد خطای ReferenceError می‌شوند.

نوع متغیر رفتار Hoisting
var Hoist می‌شود (مقدار undefined)
let/const Hoist می‌شود اما قابل دسترسی نیست (Temporal Dead Zone)
function کامل Hoist می‌شود (بدنه تابع نیز)

تفاوت‌های کلیدی

  • توابع به طور کامل Hoist می‌شوند (هم اعلان و هم تعریف)
  • متغیرهای var فقط اعلانشان Hoist می‌شود، نه مقداردهی
  • کلاس‌ها در جاوااسکریپت Hoist نمی‌شوند
  • عبارات تابعی (Function Expressions) مانند متغیرها رفتار می‌کنند

برای درک عمیق‌تر این مفهوم، می‌توانید در مشاهده کنید توضیحات تکمیلی را مطالعه نمایید.


نکات مهم:

  1. از let و const به جای var استفاده کنید تا از مشکلات Hoisting جلوگیری شود
  2. همیشه متغیرها را قبل از استفاده تعریف کنید
  3. توابع را به صورت Function Declaration تعریف کنید تا Hoist شوند