تبلیغات

کلمه کلیدی let در جاوا اaسکریپت و تفاوت آن با var

کلمه کلیدی let در جاوا اaسکریپت و تفاوت آن با var

در اکما اسکریپت (ECMAScript)، کلمه کلیدی جدیدی برای تعریف متغیر به نام let به جاوا اسکریپت اضافه شده است؛ که به جای var می‌توان از آن استفاده کرد. این کلمه کلیدی دقیقا همانند var تعریف و استفاده می‌شود! مثلا به صورت زیر:

let name = "FuLLKade";
name += ".COM";
console.log(name);

بنابراین تفاوت var و let در چیست؟!

اولین تفاوت

یکی از تفاوت‌های این دو کلمه کلیدی که برای تعریف متغیر استفاده می‌شوند، در قلمرو (Scope) آنهاست! یعنی چه؟! 😐

var باعث می‌شود تا متغیر، تحت قلمروی نزدیک‌ترین بلاک فانکشن (تابع) خود در بیاید! اما let، تحت قلمروی نزدیک‌ترین بلاک است و فرقی ندارد که تابع باشد یا شرط و …! اما دوباره یعنی چه؟! 😀

اجازه دهید مثالی بزنیم. ابتدا از var:

function fullkade() {
	if (2 > 0) {
		var message = 'salam';
	}
	console.log(message);
}

fullkade();

اگر این کد را اجرا کنید، عبارت salam در لاگ چاپ می‌شود! یعنی اگرچه message داخل بلاک شرط تعریف شده است، ولی قلمروی آن تحت نزدیک‌ترین فانکشن به خود است. اما اجازه دهید همین را با let بنویسیم:

function fullkade() {
	if (2 > 0) {
		let message = 'salam';
	}
	console.log(message);
}

fullkade();

با اجرای این کد، می‌بینید که چیزی چاپ نمی‌شود!

بنابراین به نظر شما کدام یک بهتر است؟! آیا استفاده از var، موجوب نخواهد شد بعدا به مشکلاتی برخورد کنیم؟!

دومین تفاوت

تفاوت دیگر این است که متغیرهای تعریف شده با let، قبل از اینکه در محدوده‌ی خود مقدار دهی نشوند، قابل دسترسی نیستند! اما یعنی چه؟! 😐

به مثال زیر دقت کنید:

console.log(name);
var name = "fullkade"; // undefined

با اجرای این کد، خواهید دید که undefined به معنای تعریف نشده چاپ می‌شود! اما اگر همین را با let بنویسیم:

console.log(name);
let name = "fullkade"; // undefined

خواهید دید که یک دوباره undefined چاپ می‌شود! خب پس تفاوت چیست؟!

  • اگر بعدا با var تعریف شود یعنی: undefined است؛ ولی قابل دسترسی است!
  • اگر با val تعریف شود، یعنی: undefined است؛ ولی دسرتسی نیست.

بنابراین اگر کدی که با let می‌باشد را به صورت زیر بنویسیم:

try {
  console.log(name);
} catch (exception) {
  console.log("exception");
}
let name = "salam";

در اینصورت با خطا روبرو خواهید شم؛ همچنین در کد بالا فرقی ندارد که let را داخل try بنویسیم و یا بعد از آن بنویسیم. اما حالا همین را با var ببینید:

try {
  console.log(name);
} catch (exception) {
  console.log("exception");
}
var name = "salam";

احتمالا salam چاپ شود! لذا به غیرمنطقی بودن var و استاندارد نبودن آن پی خواهید برد.

سومین تفاوت

هردو را می‌توان به صورت گلوبال (سراسری) تعریف کرد؛ اما آن مواردی که با let تعریف می‌شوند، برخلاف var، جزء یکی از ویژگی‌ها یا پروپرتی‌های آبجکت سراسری windows نخواهند شد! مثال:

let h1 = 'hello';
var h2 = 'bye';

console.log(h1); // undefined
console.log(h2); // 'bye'

چهارمین تفاوت

زمان استفاده از var، فرقی ندارد که یک متغیری با یک نام قبلا تعریف کرد‌ه‌اید یا نه!  مثلا:

var name = 'FuLLKade';
var name = 'Hi';

هیچ خطایی نخواهد گرفت! اما در let اینگونه نیست!

let name = 'FuLLKade';
let name = 'Hi'; // SyntaxError: Identifier 'name' has already been declared

در اینجا با خطای SyntaxError روبرو خواهیم شد؛ مبنا بر اینکه این شناسه قبلا برای متغیر دیگری تعریف شده است. البته این مربوط به این نیست که اگر در بیرون از توابع چیزی تعریف کردیم، نتوانیم داخل محدوده‌ی توابع با همان اسم چیز جدیدی تعریف کنیم. چراکه هردوی اینها محدوده‌ی توابع را نیز در نظر می‌گیرند.

امیدوارم از مطلب لذت برده باشید.

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

یه کلاسِ تعریف نشده ... فقط برای ارتباط کاری تلگرام پیام بدید ...

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک