Hoisting
در جاوااسکریپت، Hoisting به معنی بالا بردن (یا انتقال) تعریف متغیرها و توابع به بالای Scope خودشون قبل از اجرای کد است.
به عبارت ساده، جاوااسکریپت قبل از اجرای کد، تعاریف var و توابع را پردازش میکند و به بالای Scope منتقل میکند.
🔹 Hoisting برای توابع
توابعی که با Function Declaration تعریف میشوند، کامل Hoist میشوند و میتوان قبل از تعریف آنها فراخوانی کرد:
📌 خروجی:
اما توابع Function Expression با
varفقط نام متغیر را Hoist میکنند، نه مقدار تابع را:
🔹 Hoisting برای متغیرها
1. متغیرهای var
-
نام متغیر Hoist میشود، اما مقداردهی نه.
-
قبل از مقداردهی، مقدار آن
undefinedاست.
2. متغیرهای let و const
-
Hoist میشوند اما در "Temporal Dead Zone" (TDZ) قرار دارند.
-
قبل از مقداردهی، دسترسی به آنها خطا ایجاد میکند.
🔹 Temporal Dead Zone (TDZ)
-
محدودهای است که متغیر با
letیاconstHoist شده ولی هنوز مقداردهی نشده است. -
هر دسترسی قبل از مقداردهی باعث خطا میشود.
🔹 نکات کلیدی
-
Function Declaration → کامل Hoist میشود.
-
Function Expression → فقط نام متغیر Hoist میشود.
-
var → نام متغیر Hoist میشود، مقداردهی نه.
-
let / const → Hoist میشوند ولی در TDZ هستند و قبل از مقداردهی دسترسی غیرمجاز است.
-
Hoisting فقط تعریفها را بالا میبرد، اجرا و مقداردهی در جای خودش انجام میشود.
✅ خلاصه
-
Hoisting باعث میشود بتوانیم توابع و متغیرها را قبل از تعریف فراخوانی کنیم (با محدودیتها).
-
برای کاهش خطا و کد خواناتر، بهتر است همیشه متغیرها را قبل از استفاده تعریف کنیم و از
let/constبه جایvarاستفاده کنیم.
HTML
Tailwind Css
Bootstrap 5
Java script
++C
Python
Three.js
Gsap
Sass
SQL
React