تفاوت let و var در جاوا اسکریپت


۱۸ تیر ۱۳۹۹
تفاوت let و var در جاوااسکریپت

سردرگمی‌های زیادی برای علاقه‌مندان به جاوا اسکریپت در استفاده از let و var و تفاوت میان آن‌ها وجود دارد. در این مقاله به این سردرگمی و گیجی شما پایان می‌دهیم تا به راحتی بتوانید انتخاب درستی میان let و var در پروژه‌های جاوا اسکریپتی خود داشته باشید.

توضیح کلی:

let به شما این اجازه را می‌دهد که متغیر‌هایی تعریف کنید که به یک محدوده بلوک از کد، مثل یک حلقه for، محدود باشد و خارج از محدوده بلوک‌ تعریف نشده باشد. برخلاف var، متغیری که با var تعریف شده باشد، بدون در نظر گرفتن محدوده یک بلوک، در تمام کد قابل دسترس و سراسری (global) است.

حالا به این که چه تفاوتی با یکدیگر دارند را بررسی می‌کنیم:

آبجکت سراسری window:

حتی اگر یک متغیر را توسط let در کنار یک متغیری که توسط var ایجاد شده باشد، تعریف کنیم، بازهم متغیری که با let تعریف شده به آبجکت window اضافه نمی‌شود. مثال:

var varVariable = “This is var variable.”;
let letVariable = “This is let variable.”;

حالا بیایید بعد از تعریف این دو متغیر مقدار آن‌ها را در خروجی ببینیم:

console.log(window.varVariable);
// Output: This is var variable.
console.log(window.letVariable);
// Output: undefined

بنابراین نمی‌توان به متغیرهایی که توسط let تعریف شده‌اند، توسط آبجکت window دسترسی پیدا کرد، زیرا این نوع متغیرها همیشه به یک بلوک از کد محدود هستند و هیچ گاه نمی‌توان به صورت سراسری یا global به آن‌ها دست یافت.

Block:

زمانی متغیری را با let تعریف می‌کنیم که قرار باشد به صورت محدود، در یک محدوده از کد از آن استفاده کنیم. به طور مثال در حلقه‌ for، حلقه while و یا در داخل بلوک یک if. به طور کل هرجایی که نیاز باشد که یک متغیر در یک بلوک محدود باشد از let استفاده می‌کنیم.

مثال استفاده از let:

for(let i = 0; i < 10 ; i++) {
    console.log(i);
}
// Output: 0, 1, 2, ..., 9
console.log(i);
// Output: ReferenceError: i is not defined

مثال استفاده از var:

for(var i = 0; i < 10 ; i++) {
    console.log(i);
}
// Output: 0, 1, 2, ..., 9
console.log(i);
// Output: 10

همانطور که مشاهده می‌کنید متغیر i در مثال دوم،‌ بعد از پایان حلقه نیز همچنان مقدار دارد. به عبارتی متغیر i در حلقه for توسط var به صورت سراسری تعریف شده و حلقه اجرا می‌شود تا اینکه مقدار i برابر با ۱۰ می‌شود و شرط حلقه غلط می‌شود و از حلقه خارج می‌شویم، اما متغیر i همچنان داری مقدار ۱۰ است، برخلاف let که بعد از پایان حلقه متغیر داخل حلقه دیگر وجود ندارد.

Redeclaration:

اگر متغیری را توسط let تعریف و مقداردهی کردید به هیچ وجه نمی‌توانید برای بار دوم آن را تعریف و مقداردهی کنید. اما اگر از var استفاده کنید در همان بلوک می‌توانید دوباره همان متغیر را تعریف و مقداردهی کنید. مثال زیر را ببینید تا بهتر متوجه شوید: (فرض کنید در حال استفاده از حالت strict هستیم.)

’use strict’;
var temp = “this is a temp variable.”;
var temp = “this is a second temp variable.”; 

اما به هنگام استفاده از let:

’use strict’;
let temp = “this is temp variable.”;
let temp = “this is a second temp variable.”;
// SyntaxError: temp is already declared.

Function:

زمانی که از var و let در توابع استفاده می‌کنیم، رفتارشان یکسان خواهد بود:

function aSampleFunction(){
    let letVariable = "Hey! What's up? I am let variable.";
    var varVariable = "Hey! How are you? I am var variable.";
    console.log(letVariable); //Hey! What's up? I am let variable.
    console.log(varVariable); //Hey! How are you? I am var variable.
}
// ---
aSampleFunction()
// Output: Hey! What's up? I am let variable.
// Output: Hey! How are you? I am var variable.

حالا که تفاوت کلی var و let را متوجه شدید می‌توانید خیلی بهتر و بهینه‌تر کد بزنید و به این نکته توجه کنید که آیا می‌خواهید یک متغیر در یک بلوک محدود باشد یا خیر؟

منبع: https://codeburst.io/difference-between-let-and-var-in-javascript-537410b2d707

برچسب‌ها:

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید و فقط برای بیش از آن هزینه پرداخت کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

توسعه‌دهندگان درباره‌ی ما چه می‌گویند

تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...

MohammadReza
liara testimonial
keikaavousi

بعد از بسته شدن @fandoghpaas و ناراحتی همه‌مون از اینکه یه سرویس خوب و صادق نمی‌تونه از پس هزینه‌ها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوت‌هایی داشت که کمی کار می‌خواست ولی تا الان کاملا راضی.

jadi
liara testimonial
jadi

یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.

Arch
liara testimonial
EbadiDev

واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیت‌های سرویس دیتابیس‌شون اینه که خودشون به صورت دوره‌ای بکآپ میگیرن.
...

Ali Najafi
liara testimonial
me_ali_najafi

یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@

Navid
liara testimonial
1navid

عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم

Amir H Shekari
liara testimonial
vanenshi

همراه شما هستیم

در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
تلفن واحد فروش:
۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)