JavaScript Hoisting
JavaScript Hoisting یعنی اینکه مفسر جاوااسکریپت قبل از اجرای کد، بعضی از اعلانها (declarations) را به بالای اسکوپشان «بالا میکشد».
نکته مهم: فقط اعلان بالا میآید، نه مقداردهی.
1️⃣ Hoisting در var
console.log(x); // undefined
var x = 10;
console.log(x); // 10
در واقع کد به این شکل تفسیر میشود:
console.log(x);
x = 10;
console.log(x);
🔹 var hoist میشود و مقدار اولیهاش undefined است.
2️⃣ Hoisting در let و const
console.log(y); // ❌ ReferenceError
let y = 5;
🔸 let و const هم hoist میشوند اما قابل دسترسی نیستند تا زمانی که خط تعریفشان اجرا شود.
این بازه را Temporal Dead Zone (TDZ) مینامند.
3️⃣ Hoisting در Function Declaration
sayHello();
function sayHello() {
console.log(“Hello!”);
}
✅ کاملاً درست کار میکند
🔹 چون کل تابع hoist میشود.
4️⃣ Function Expression و Arrow Function
sayHi(); // ❌ TypeError
var sayHi = function () {
console.log(“Hi”);
};
یا:
sayHi(); // ❌ ReferenceError
let sayHi = () => {
console.log(“Hi”);
};
🔸 اینها مثل متغیر رفتار میکنند، نه مثل تابع declaration
5️⃣ خلاصه سریع
| نوع | Hoisting | قابل استفاده قبل از تعریف |
|---|---|---|
var |
✅ | ⚠️ undefined |
let |
✅ | ❌ TDZ |
const |
✅ | ❌ TDZ |
| Function Declaration | ✅ | ✅ |
| Function Expression | وابسته به نوع متغیر | ❌ |
دیدگاهتان را بنویسید