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) مانند متغیرها رفتار میکنند
برای درک عمیقتر این مفهوم، میتوانید در مشاهده کنید توضیحات تکمیلی را مطالعه نمایید.
نکات مهم:
- از let و const به جای var استفاده کنید تا از مشکلات Hoisting جلوگیری شود
- همیشه متغیرها را قبل از استفاده تعریف کنید
- توابع را به صورت Function Declaration تعریف کنید تا Hoist شوند