JavaScript:کلمه کلیدی Let در جاوااسکریپت

از ویکی کد
پرش به ناوبری پرش به جستجو
میانبر:
الگو:اج
دورهٔ آموزشی جاوااسکریپت
Javascript.jpg
Tutorial
۱آموزش جاوااسکریپت
۲مقدمه‌ای بر جاوااسکریپت
۳JavaScript:قوانین و اصول اولیه زبان جاوااسکریپت
۴JavaScript:خروجی جاوااسکریپت
۵JavaScript:عبارت‌ها در جاوااسکریپت
۶JavaScript:شیوهٔ نوشتن (Syntax) عبارات یا دستورات در جاوااسکریپت
۷JavaScript:نظرات یا کامنت‌ها (Comments) در جاوااسکریپت
۸JavaScript:متغیرها در جاوااسکریپت
۹JavaScript:عملگرهای جاوااسکریپت
۱۰JavaScript:عملگرهای ریاضی در جاوااسکریپت
۱۱JavaScript:عملگرهای مقداردهی در جاوااسکریپت
۱۲JavaScript:انواع داده‌ها در جاوااسکریپت
۱۳JavaScript:توابع در جاوااسکریپت
۱۴JavaScript:اشیاء (object) در جاوااسکریپت
۱۵JavaScript:رویدادها در جاوااسکریپت
۱۶JavaScript:رشته‌های متنی (string) در جاوااسکریپت
۱۷JavaScript:متدهای نوع داده متنی یا رشته‌ای در جاوااسکریپت
۱۸JavaScript:اعداد در جاوااسکریپت
۱۹JavaScript:متدهای داده‌های عددی در جاوااسکریپت
۲۰JavaScript:آرایه‌ها در جاوااسکریپت
۲۱JavaScript:متدهای آرایه در جاوااسکریپت
۲۲JavaScript:مرتب‌سازی آرایه‌ها در جاوااسکریپت
۲۳JavaScript:متدهای پیمایش آرایه در جاوااسکریپت
۲۴JavaScript:اشیاء تاریخ و زمان در جاوااسکریپت
۲۵JavaScript:فرمت‌های تاریخ و زمان در جاوااسکریپت
۲۶JavaScript:متدهای دریافت تاریخ و زمان در جاوااسکریپت
۲۷JavaScript:متدهای تنظیم زمان و تاریخ در جاوااسکریپت
۲۸JavaScript:شی ریاضی (Math) در جاوااسکریپت
۲۹JavaScript:ایجاد عدد تصادفی در جاوااسکریپت
۳۰JavaScript:مقادیر بولین (Booleans) در جاوااسکریپت
۳۱JavaScript:عملگرهای منطقی و مقایسه‌ای در جاوااسکریپت
۳۲JavaScript:ساختار if else و else if در جاوااسکریپت
۳۳JavaScript:تکه کد Switch در جاوا اسکریپت
۳۴JavaScript:حلقه For در جاوااسکریپت
۳۵JavaScript:حلقه While در جاوااسکریپت
۳۶JavaScript:کلمات کلیدی Break و Continue در جاوااسکریپت
۳۷JavaScript:تبدیل نوع داده‌ها در جاوااسکریپت
۳۸JavaScript:عملیات‌های بیتی در جاوااسکریپت
۳۹JavaScript:عبارات با قاعده در جاوااسکریپت
۴۰JavaScript:خطاها در جاوااسکریپت - رخ دادن خطا و رفع آن
۴۱JavaScript:Scope در جاوااسکریپت
۴۲JavaScript:Hoisting یا جا به جایی کدها در جاوااسکریپت
۴۳JavaScript:استفاده از مد یا حالت سخت‌گیرانه (use strict) در جاوااسکریپت
۴۴JavaScript:کلمه کلیدی This در جاوااسکریپت
۴۵JavaScript:کلمه کلیدی Let در جاوااسکریپت
۴۶JavaScript:ثابت‌ها در جاوااسکریپت
۴۷JavaScript:تعریف توابع به صورت پیکان
۴۸JavaScript:کلاس‌ها در جاوااسکریپت
۴۹JavaScript:اشکال‌زدایی در جاوااسکریپت
۵۰JavaScript:راهنمای استایل و استانداردهای کدنویسی در جاوااسکریپت
۵۱JavaScript:بهترین تمرینات جاوااسکریپت
۵۲JavaScript:اشتباهات رایج در برنامه‌نویسی جاوااسکریپت
۵۳JavaScript:کارایی در جاوااسکریپت
۵۴JavaScript:کلمات رزرو شده در جاوااسکریپت
۵۵JavaScript:ورژن‌های جاوااسکریپت
۵۶JavaScript:ECMAScript 5 - JavaScript 5
۵۷JavaScript:ECMAScript 6 - ECMAScript 2015
۵۸JavaScript:جیسون (JSON) در جاوااسکریپت
---

ECMAScript ۲۰۱۵

ورژن ES2015 جاوااسکریپت، شامل دو کلمهٔ کلیدی جدید بود:letوconst. [۱]

این دو کلمهٔ کلیدی Scope یا ناحیه بلاک‌کد متغیرها (و ثابت‌ها) را در جاوااسکریپت مشخص می‌کنند.

قبل از ورژن ES۲۰۱۵، جاوااسکریپت تنها دو نوع ناحیه (به انگلیسی: Scope) برای بلاک‌های کد خود داشت: Global Scope (به فارسی: ناحیهٔ کد کلی) یا Function Scope (به فارسی: ناحیه کد تابع).

ناحیه کد کلی (به انگلیسی: Global Scope)

متغیرهایی که به صورت کلی (بیرون از هر گونه تابعی) تعریف می‌شوند درون ناحیه کد یا Scope کلی یا Global قرار می‌گیرند.

مثال

var carName = "Volvo";

// code here can use carName

function myFunction() {
  // code here can also use carName
}

متغیرهای کلی یا Global را می‌توان از هر جایی در یک برنامه جاوااسکریپت، دسترسی داشت.

ناحیه کد تابع (به انگلیسی: Function Scope)

متغیرهایی که به صورت محلی (به انگلیسی: Locally) (درون یک تابع) تعریف می‌شوند دارایLocally یا Function Scope هستند.

مثال

// code here can NOT use carName

function myFunction() {
  var carName = "Volvo";
  // code here CAN use carName
}

// code here can NOT use carName

متغیرهای محلی یا local تنها درون تابعی که تعریف شده‌اند قابل دسترسی اند.

ناحیه بلاک کد (به انگلیسی: Block Scope) در جاوااسکریپت

متغیرهایی که به وسیلهٔ کلمهٔvarتعریف می‌شوند دارای ناحیه بلاک کد یا Block Scope نیستند.

متغیرهایی که درون یک بلاک {} قرار می‌گیرند از بیرون از بلاک کد قابل دسترسی هستند.

مثال

{
  var x = 2;
}
// x CAN be used here

قبل از ورژن ES۲۰۱۵ جاوااسکریپت ناحیهٔ بلاک یا Block Scope را نداشت.

متغیرهایی که با کلمهٔ کلیدیletتعریف می‌شوند می‌توانند دارای ناحیه بلاک یا Block Scope باشند.

متغیرهایی از این نوع که درون یک بلاک {} قرار می‌گیرند، از بیرون بلاک قابل دسترسی نیستند:

مثال

{
  let x = 2;
}
// x can NOT be used here

از دوباره تعریف کردن متغیرها

از دوباره تعریف کردن یک متغیر با استفاده از کلمهٔ کلیدیvarمی‌تواند موجب بروز مشکلات شود.

از دوباره تعریف کردن یک متغیر درون یک بلاک موجب از دوباره تعریف شدن متغیر خارج از بلاک نیز می‌شود:

مثال

var x = 10;
// Here x is 10
{
  var x = 2;
  // Here x is 2
}
// Here x is 2

از دوباره تعریف کردن یک متغیر با کلمهٔ کلیدیletمی‌تواند این مشکل را رفع کند.

از دوباره تعریف کردن یک متغیر درون یک بلاک موجب از دوباره تعریف شدن متغیر خارج از بلاک نخواهد شد:

مثال

var x = 10;
// Here x is 10
{
  let x = 2;
  // Here x is 2
}
// Here x is 10

سازگاری با مروگرها

کلمهٔ کلیدیletبه طور کامل در مرورگر اینترنت اکسپلور ورژن ۱۱ یا قدیمی‌تر پشتیبانی نمی‌شود.

جدول زیر، اولین ورژنهای مرورگرهایی که به طور کامل از کلمهٔ کلیدیletپشتیبانی می‌کنند را لیست کرده‌است:

کروم سافاری فایرفاکس Edge اپرا
Chrome 49 Safari 11 Firefox 44 Edge12 Opera 36
مارس ۲۰۱۶ سپتامبر ۲۰۱۷ ژانویه ۲۰۱۵ ژوئیه ۲۰۱۵ مارس ۲۰۱۶

ناحیه کد حلقه (به انگلیسی: Loop Scope):

استفاده از کلمهvarدرون یک حلقه:

مثال

var i = 5;
for (var i = 0; i < 10; i++) {
  // some statements
}
// Here i is 10

استفاده از کلمه letدرون یک حلقه:

مثال

let i = 5;
for (let i = 0; i < 10; i++) {
  // some statements
}
// Here i is 5


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

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

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

ناحیه کد تابع (به انگلیسی: Function Scope)

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

هر دو آنها دارای ناحیه کد تابع یا Function Scope هستند:

function myFunction() {
  var carName = "Volvo";   // Function Scope
}
function myFunction() {
  let carName = "Volvo";   // Function Scope
}

ناحیه کد کلی (به انگلیسی: Global Scope)

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

هر دو آنها دارای ناحیه کد کلی یا Global Scope هستند:

var x = 2;       // Global scope


let x = 2;       // Global scope

متغیرهای با ناحیه کد کلی در HTML

با زبان جاوااسکریپت، ناحیه کد کلی یا Global scope همان محیط جاوااسکریپت است.

در HTML، ناحیه کد کلی یا Global scope شیء پنجره یا Window است.

متغیرهای کلی یا Global با کلمهٔ کلیدیvarو مربوط به شیء پنجره یا Window تعریف می‌شوند:

مثال

var carName = "Volvo";
// code here can use window.carName

متغیرهای کلی یا Global که با کلمهٔ کلیدیletتعریف می‌شوند به شیء پنجره یا window مربوط نیستند:

مثال

let carName = "Volvo";
// code here can not use window.carName

از دوباره تعریف کردن

متغیری که با کلمهٔ کلیدیvarتعریف شده‌است را می‌توان در هر جایی از یک برنامه از دوباره تعریف کرد:

مثال

var x = 2;

// Now x is 2
 
var x = 3;

// Now x is 3

از دوباره تعریف کردن یک متغیر با کلمهٔ کلیدیvarبا یک متغیر با کلمهٔ کلیدیletدر ناحیه کد مشترک یا Scope مشترک یا درون بلاک مشترک مجاز نیست:

مثال

var x = 2;       // Allowed
let x = 3;       // Not allowed

{
  var x = 4;   // Allowed
  let x = 5   // Not allowed
}

از دوباره تعریف کردن یک متغیر با کلمهٔ کلیدیletبا یک متغیر دیگر با کلمهٔ کلیدیletدر ناحیه کد مشترک یا scope مشترک یا درون بلاک مشترک نیز، مجاز نیست:

مثال

let x = 2;       // Allowed
let x = 3;       // Not allowed

{
  let x = 4;   // Allowed
  let x = 5;   // Not allowed
}

از دوباره تعریف کردن یک متغیر با کلمهٔ کلیدیletبا یک متغیر دیگر با کلمهٔ کلیدیvar، در ناحیه کد مشترک یا Scope، یا درون بلاک مشترک نیز مجاز نیست:

مثال

let x = 2;       // Allowed
var x = 3;       // Not allowed

{
  let x = 4;   // Allowed
  var x = 5;   // Not allowed
}

از دوباره تعریف کردن یک متغیر با کلمهٔ کلیدیletدر ناحیه کد دیگر یا بلاک کد دیگر مجاز است:

مثال

let x = 2;       // Allowed

{
  let x = 3;   // Allowed
}

{
  let x = 4;   // Allowed
}

بالا بردن (به انگلیسی: Hoisting)

متغیرهایی که با کلمهvarتعریف می‌شوند به بالای اسکریپت hoisted (به فارسی: منتقل)می‌شوند. (اگر شما نمی‌دانید که Hoisting چیست، فصل Hoisting یا جا به جایی را بخوانید )

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

مثال

// you CAN use carName here
var carName;

متغیرهایی که با کلمهٔ کلیدیletتعریف می‌شوند به بالای اسکریپت جابه‌جا یا hosite نمی‌شوند.

استفاده از یک متغیر که با کلمهٔ کلیدیletتعریف شده قبل از تعریف آن، موجب پیغام خطایReferenceErrorو یاخطای مرجع خواهد شد.

متغیر درون “موقعیت مرگ موقت” از بالای بلاک قرار دارد تا زمانی که تعریف شود:

مثال

// you can NOT use carName here
let carName;

منابع آموزشی