Let در JavaScript
ECMAScript 2015
ECMAScript 2015 دو کلمه کلیدی مهم جدید به JavaScript اضافه کرده است:let
و const
.
این دو کلمه کلیدی در JavaScript محدوده بلوک را ارائه میدهند (Block Scope) متغیرها (و مقدارهای ثابت).
قبل از ES2015، JavaScript فقط دو نوع محدوده دارد:محدوده جهانیومحدوده کاربری.
محدوده جهانی
گلوبالمتغیرهایی که در خارج از Function (در بیرون Function) تعریف شدهاند دارایمحدوده جهانی.
مثال
var carName = "porsche"; // کد اینجا میتواند از carName استفاده کند function myFunction() { // کد اینجا نیز میتواند از carName استفاده کند }
گلوبالمتغیرها میتوانند در هر جایی از برنامه JavaScript قابل دسترسی باشند.
محدوده کاربری
محلیمتغیرهایی که در داخل Function (در Function) تعریف شدهاند دارایمحدوده کاربری.
مثال
// کد اینجا نمیتواند از carName استفاده کند function myFunction() { var carName = "porsche"; // کد اینجا میتواند از carName استفاده کند } // کد اینجا نمیتواند از carName استفاده کند
محلیمتغیرها فقط میتوانند در داخل Functionهایی که در آنها تعریف شدهاند قابل دسترسی باشند.
محدوده بلوک JavaScript
از طریق var
متغیرهای تعریف شده با استفاده از کلمات کلیدی بدون محدوده بلوک دارند.محدوده.
در بلوک {} متغیرهای تعریف شده در درون بلوک از بیرون بلوک قابل دسترسی هستند.
مثال
{ var x = 10; } // در اینجا میتوان از x استفاده کرد
قبل از ES2015، JavaScript دارای محدوده بلوک نبود.
میتوان از let
کلمات کلیدی تعریف متغیرهای دارای محدوده بلوک را دارند.
در بلوک {} متغیرهای تعریف شده در درون بلوک قابل دسترسی از بیرون بلوک نیستند:
مثال
{ let x = 10; } // در اینجا نمیتوان از x استفاده کرد
دوباره تعریف متغیر
استفاده از var
کلمات کلیدی دوباره تعریف متغیر میتواند مشکلی ایجاد کند.
دوباره تعریف متغیر در بلوک باعث تعریف مجدد متغیرهای خارج از بلوک نیز میشود:
مثال
var x = 10; // در اینجا x برابر با 10 است { var x = 6; // در اینجا x برابر با 6 است } // در اینجا x برابر با 6 است
استفاده از let
کلمات کلیدی دوباره تعریف متغیر میتواند این مشکل را حل کند.
دوباره تعریف متغیر در بلوک باعث تعریف مجدد متغیرهای خارج از بلوک نمیشود:
مثال
var x = 10; // در اینجا x برابر با 10 است { let x = 6; // در اینجا x برابر با 6 است } // در اینجا x برابر با 10 است
پشتیبانی مرورگر
Internet Explorer 11 یا نسخههای قبلی آن پشتیبانی کامل نمیکند let
کلمات کلیدی.
جدول زیر تعریف میکند که اولین نسخه کامل let
كلمات کلیدی نسخه مرورگر:
Chrome 49 | IE / Edge 12 | Firefox 44 | Safari 11 | Opera 36 |
مارس 2016 | جولای 2015 | ژانویه 2015 | سپتامبر 2017 | مارس 2016 |
محدوده حلقهای
در حلقه استفاده میشود var
:
مثال
var i = 7; for (var i = 0; i < 10; i++) { // برخی از دستورات } // در اینجا i برابر 10 است
در حلقه استفاده میشود let
:
مثال
let i = 7; for (let i = 0; i < 10; i++) { // برخی از دستورات } // در اینجا i برابر 7 است
در مثال اول، متغیری که در حلقه استفاده میشود var
متغیر خارج از حلقه را دوباره تعریف کرده است.
در مثال دوم، متغیری که در حلقه استفاده میشود let
متغیرهای خارج از حلقه را دوباره تعریف نکرده است.
اگر در حلقه از let
متغیر i را اعلام کرد، پس تنها در داخل حلقه، متغیر i قابل مشاهده است.
محدوده کاربری
در زمان اعلام متغیر در داخل تابع از var
و let
همهچیز شبیه به هم هستند.
آنها همهمحدوده کاربری:
function myFunction() { var carName = "porsche"; // محدوده کاربری } function myFunction() { let carName = "porsche"; // محدوده کاربری }
محدوده جهانی
اگر در خارج از بلوک اعلام شود، پس var
و let
همهچیز شبیه به هم هستند.
آنها همهمحدوده جهانی:
var x = 10; // محدوده جهانی let y = 6; // محدوده جهانی
متغیرهای جهانی در HTML
در استفاده از JavaScript، محدوده جهانی محیط JavaScript است.
در HTML، محدوده جهانی شیء window است.
از طریق var
متغیرهای تعریف شده با استفاده از کلمات کلیدی متعلق به شیء window هستند:
مثال
var carName = "porsche"; // کد در اینجا میتواند از window.carName استفاده کند
از طریق let
متغیرهای تعریف شده با استفاده از کلمات کلیدی متعلق به شیء window نیستند:
مثال
let carName = "porsche"; // کد در اینجا نمیتواند از window.carName استفاده کند
دوباره تعریف
مجاز است که در هر مکان از برنامه استفاده شود var
دوباره تعریف متغیر JavaScript:
مثال
var x = 10; // حالا،x برابر 10 است var x = 6; // حالا،x برابر 6 است
در محدودهای مشابه یا در بلوک مشابه، از طریق let
تعریف مجدد یک var
متغیرها مجاز نیستند:
مثال
var x = 10; // مجاز است let x = 6; // نه مجاز است { var x = 10; // مجاز است let x = 6; // نه مجاز است }
در محدودهای مشابه یا در بلوک مشابه، از طریق let
تعریف مجدد یک let
متغیرها مجاز نیستند:
مثال
let x = 10; // مجاز let x = 6; // نه مجاز است { let x = 10; // مجاز let x = 6; // نه مجاز است }
در محدودهای مشابه یا در بلوک مشابه، از طریق var
تعریف مجدد یک let
متغیرها مجاز نیستند:
مثال
let x = 10; // مجاز var x = 6; // مجاز نیست { let x = 10; // مجاز var x = 6; // مجاز نیست }
در محدودههای مختلف یا بلوکها از طریق let
تعریف مجدد متغیر مجاز است:
مثال
let x = 6; // مجاز { let x = 7; // مجاز } { let x = 8; // مجاز }
Hoisting
از طریق var
متغیرهای اعلام شدهHoistingبه بالا. اگر با مفهوم "Hoisting" آشنا نیستید، فصل Hoisting ما را مطالعه کنید.
میتوانید از متغیر قبل از تعریف آن استفاده کنید:
مثال
// در اینجا، میتوانید از carName استفاده کنید var carName;
از طریق let
متغیرهای تعریف شده به بالا برنمیگردند.
در تعریف let
استفاده از متغیر قبل از تعریف آن منجر به ReferenceError میشود.
متغیرها از ابتدای بلوک تا زمان تعریفشان در "منطقه مرده موقت" قرار دارند:
مثال
// در اینجا، نمیتوانید از carName استفاده کنید let carName;