تفاوت بین کلمات کلیدی let و var چیه ؟
what is the difference between let and var
سلام
میخواستم بدونم تفاوتهای بین این دو کلمه کلیدی تو تعریف متغییر چیه؟ و کی بهتره از let به جای var استفاده کنیم؟
چند تا تفاوت اصلی بین تعریف متغییر با کلمه کلیدی var و let وجود داره که در ادامه به مهم ترین هاش اشاره میکنم.
1 – محدوده (Scope)
var دارای محدوده تابعی (function scope) هست ، به این معنی که اگه داخل یک تابع تعریف بشه ، تو کل اون تابع قابل دسترسی است.
let دارای محدوده بلوکی (block scope) است، به این معنی که فقط در داخل بلوکی که تعریف شده ( یعنی بین {} ) قابل دسترسه.
مثال
function test() { if (true) { var x = 1; let y = 2; } console.log(x); console.log(y); } test();
2 – هوستینگ (Hoisting)
متغیرهای تعریف شده با var به ابتدای محدوده خودشون منتقل میشن ، اما مقداردهی اولیه اونها انجام نمیشه.
متغیرهای تعریف شده با let هم به ابتدای بلوک خودشون منتقل میشن، اما قبل از مقداردهی اولیه نمیتونیم به اونها دسترسی داشته باشیم و در این بازه زمانی اصطلاحاً (temporal dead zone) هستند.
مثال
console.log(a); // undefined var a = 5;
console.log(b); // ReferenceError let b = 10;
3 - تعریف مجدد (Redeclaration)
var اجازه میده که متغیر رو دوباره تعریف کنی، ولی let این اجازه رو نمیده ، که این باعث میشه کد تمیزتر و احتمال خطا کمتر بشه.
var x = 1; var x = 2; // no problem
let y = 1; let y = 2; // error
به طور کلی، استفاده از let به خاطر قابلیتهای بهترش در کنترل حوزه و جلوگیری از خطاهای غیرمنتظره توی کد پیشنهاد میشه.