تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

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


۱۸ تیر ۱۳۹۹

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

در ادامه خواهید خواند:

  • توضیح کلی
  • آبجکت سراسری window
  • Block
  • Redeclaration
  • Function
  • جمع بندی
تفاوت let و var در جاوااسکریپت

توضیح کلی

کلیدواژه‌ی let به شما این امکان را می‌دهد که متغیرهایی تعریف کنید که تنها در محدوده‌ی بلوکی که در آن قرار دارند معتبر باشند؛ این بلوک می‌تواند یک شرط if، یک حلقه‌ی for یا هر بخش دیگری از کد باشد که داخل آکولاد ({}) قرار دارد. به عبارت دیگر، متغیری که با let تعریف می‌شود، دارای محدودیت دامنه بلوک (block scope) است و نمی‌توان از خارج آن بلوک به آن دسترسی داشت. این ویژگی باعث می‌شود که مدیریت داده‌ها و جلوگیری از تداخل متغیرها در بخش‌های مختلف کد آسان‌تر و ایمن‌تر شود.

در مقابل، متغیرهایی که با var تعریف می‌شوند، به جای اینکه محدود به یک بلوک باشند، در محدوده تابعی (function scope) یا در نبود تابع، به‌صورت سراسری (global) در دسترس هستند. یعنی اگر متغیری با var درون یک شرط یا حلقه تعریف شود، حتی خارج از آن ساختار نیز قابل دسترسی خواهد بود، که این موضوع ممکن است در برنامه‌های بزرگ یا پیچیده باعث بروز خطاهای پیش‌بینی‌نشده شود.

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

تفاوت null و undefined در جاوااسکریپت
تفاوت null و undefined

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

حتی اگر یک متغیر را با استفاده از let در کنار متغیری دیگر که با var تعریف شده است ایجاد کنیم، تنها متغیری که با var تعریف شده به شیء سراسری window در محیط مرورگر اضافه می‌شود. به بیان ساده‌تر، متغیرهایی که با let تعریف می‌شوند به شیء window متصل نمی‌شوند و در نتیجه، به صورت مستقیم از طریق 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

در این مثال، متغیر varVariable که با var تعریف شده است به window تعلق دارد و به‌راحتی از طریق window.varVariable در دسترس است. اما متغیر letVariable به دلیل استفاده از let در تعریف آن، تنها در محدوده‌ی بلوکی که در آن قرار دارد معتبر است و به شیء سراسری window اضافه نمی‌شود. این ویژگی یکی دیگر از تفاوت‌های مهم میان let و var محسوب می‌شود که باعث می‌شود متغیرهای let، برخلاف var، از آلودگی دامنه‌ی سراسری (global scope pollution) جلوگیری کنند و مدیریت متغیرها در برنامه‌نویسی مدرن را بهینه‌تر کنند.

با هاست Node.js لیارا، اپلیکیشن‌های خود را با سرعت، امنیت و سادگی بی‌نظیر اجرا کنید.
✅ استقرار سریع با یک کلیک✅ منابع سخت‌افزاری کاملاً اختصاصی✅ پشتیبان‌گیری خودکار
خرید و راه‌اندازی هاست Node.js

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 که بعد از پایان حلقه متغیر داخل حلقه دیگر وجود ندارد.

با هاست Vue.js لیارا، توسعه و دیپلوی اپلیکیشن‌های SPA را سریع، امن و بدون دردسر تجربه کنید.
✅ راه‌اندازی آسان تنها با چند کلیک✅ سازگاری کامل با Git و سیستم‌های CI/CD✅ امکان بک‌آپ‌گیری خودکار
خرید و راه‌اندازی هاست Vue.js

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.
آموزش مفاهیم مقدماتی Node.js
مفاهیم Node.js

جمع بندی

تفاوت اصلی بین let و var در نحوه‌ی محدوده‌بندی (scope) آن‌هاست. let فقط در محدوده‌ی بلوکی که تعریف شده معتبر است و به شیء سراسری window متصل نمی‌شود، در حالی که var دارای دامنه‌ی تابعی است و به window اضافه می‌شود.

این ویژگی‌ها باعث می‌شوند let برای جلوگیری از تداخل متغیرها و مدیریت بهتر کد گزینه‌ی مناسب‌تری باشد. بنابراین، در برنامه‌نویسی مدرن جاوااسکریپت توصیه می‌شود از let (و در صورت نیاز، const) استفاده شود تا کدی ایمن‌تر، قابل پیش‌بینی‌تر و ساخت‌یافته‌تر داشته باشیم.

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

به اشتراک بگذارید