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;