کلمهٔ کلیدی Let

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
اشیاء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مرجع جاوا اسکریپت

ECMAScript ۲۰۱۵

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

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

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

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

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

مثال

1 var carName = "Volvo";
2 
3 // code here can use carName
4 
5 function myFunction() {
6   // code here can also use carName
7 }


مشاهدهٔ نتیجه


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

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

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

مثال

1 // code here can NOT use carName
2 
3 function myFunction() {
4   var carName = "Volvo";
5   // code here CAN use carName
6 }
7 
8 // code here can NOT use carName


مشاهدهٔ نتیجه


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

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

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

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

مثال

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

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

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

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

مثال

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

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

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

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

مثال

1 var x = 10;
2 // Here x is 10
3 {
4   var x = 2;
5   // Here x is 2
6 }
7 // Here x is 2


مشاهدهٔ نتیجه


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

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

مثال

1 var x = 10;
2 // Here x is 10
3 {
4   let x = 2;
5   // Here x is 2
6 }
7 // Here x is 10


مشاهدهٔ نتیجه


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

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

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

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


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

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

مثال

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


مشاهدهٔ نتیجه


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

مثال

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


مشاهدهٔ نتیجه

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

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

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

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

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

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

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

ناحیه کد کلی (به انگلیسی: 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 تعریف می‌شوند:

مثال

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


مشاهدهٔ نتیجه


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

مثال

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


مشاهدهٔ نتیجه


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

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

مثال

1 var x = 2;
2 
3 // Now x is 2
4  
5 var x = 3;
6 
7 // Now x is 3


مشاهدهٔ نتیجه


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

مثال

1 var x = 2;       // Allowed
2 let x = 3;       // Not allowed
3 
4 {
5   var x = 4;   // Allowed
6   let x = 5   // Not allowed
7 }

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

مثال

1 let x = 2;       // Allowed
2 let x = 3;       // Not allowed
3 
4 {
5   let x = 4;   // Allowed
6   let x = 5;   // Not allowed
7 }

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

مثال

1 let x = 2;       // Allowed
2 var x = 3;       // Not allowed
3 
4 {
5   let x = 4;   // Allowed
6   var x = 5;   // Not allowed
7 }

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

مثال

1 let x = 2;       // Allowed
2 
3 {
4   let x = 3;   // Allowed
5 }
6 
7 {
8   let x = 4;   // Allowed
9 }


مشاهدهٔ نتیجه


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

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

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

مثال

1 // you CAN use carName here
2 var carName;


مشاهدهٔ نتیجه


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

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

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

مثال

1 // you can NOT use carName here
2 let carName;


منابع آموزشی