٪۴۰ تخفیف تابستانه شروع شد! بزرگترین حراج سال ما

به ما بپیوندید

آموزش تعطیلات جاوا اسکریپت

متغیرهای جاوا اسکریپت می توانند به دامنه محلی یا جهانی تعلق داشته باشند . متغیرهای جهانی را می توان با بسته شدن ، محلی (خصوصی) کرد . متغیرهای جهانی A functionمی تواند به همه متغیرهای تعریف شده در داخل تابع دسترسی داشته باشد ، مانند این: مثال function myFunction() { let a = 4;…

محمد یوسفی

27 جولای 2021

متغیرهای جاوا اسکریپت می توانند به دامنه محلی یا جهانی تعلق داشته باشند .

متغیرهای جهانی را می توان با بسته شدن ، محلی (خصوصی) کرد .


متغیرهای جهانی

functionمی تواند به همه متغیرهای تعریف شده در داخل تابع دسترسی داشته باشد ، مانند این:

مثال

function myFunction() {
  let a = 4;
  return a * a;
}

اما a functionهمچنین می تواند به متغیرهای تعریف شده در خارج از تابع دسترسی داشته باشد ، مانند این:

مثال

let a = 4;
function myFunction() {
  return a * a;
}

در آخرین مثال ، a یک متغیر جهانی است.

در یک صفحه وب ، متغیرهای جهانی به شی پنجره تعلق دارند.

متغیرهای جهانی توسط همه اسکریپت های موجود در صفحه (و در پنجره) قابل استفاده (و تغییر) هستند.

در مثال اول ، a یک متغیر محلی است.

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

متغیرهای جهانی و محلی با یک نام متغیرهای متفاوتی هستند. اصلاح یکی ، دیگری را اصلاح نمی کند.

متغیرهای ایجاد شده بدون کلمه کلیدی اعلان ( var، let، یا const) همیشه جهانی هستند ، حتی اگر در داخل یک تابع ایجاد شوند.

مثال

function myFunction() {
  a = 4;
}

متغیر در طول عمر

متغیرهای جهانی تا زمانی که صفحه کنار گذاشته نشود ، مانند زمانی که به صفحه دیگری بروید یا پنجره را ببندید ، زنده هستند.

متغیرهای محلی عمر کوتاهی دارند. آنها با فراخوانی عملکرد ایجاد می شوند و با اتمام عملکرد حذف می شوند.


یک معضل ضد

فرض کنید می خواهید از یک متغیر برای شمارش چیزی استفاده کنید و می خواهید این شمارنده در دسترس همه توابع باشد.

functionبرای افزایش شمارنده می توانید از یک متغیر سراسری و از a استفاده کنید :

مثال

// Initiate counter
let counter = 0;

// Function to increment counter
function add() {
  counter += 1;
}

// Call add() 3 times
add();
add();
add();

// The counter should now be 3

مشکلی در راه حل فوق وجود دارد: هر کدی در صفحه می تواند شمارنده را تغییر دهد ، بدون اینکه با add () تماس بگیرید.

شمارنده باید محلی برای add()عملکرد باشد تا از تغییر کد دیگر توسط آن جلوگیری کند:

مثال

// Initiate counter
let counter = 0;

// Function to increment counter
function add() {
  let counter = 0;
  counter += 1;
}

// Call add() 3 times
add();
add();
add();

//The counter should now be 3. But it is 0

این کار نکرد زیرا ما پیشخوان جهانی را به جای پیشخوان محلی نمایش می دهیم.

با اجازه دادن به عملکرد ، می توان پیشخوان جهانی را حذف و به شمارنده محلی دسترسی پیدا کرد:

مثال

// Function to increment counter
function add() {
  let counter = 0;
  counter += 1;
  return counter;
}

// Call add() 3 times
add();
add();
add();

//The counter should now be 3. But it is 1.

این کار نمی کند زیرا هر زمان که عملکرد را فراخوانی می کنیم پیشخوان محلی را تنظیم می کنیم.

یک عملکرد داخلی JavaScript می تواند این مسئله را حل کند.


توابع جاوا اسکریپت

همه توابع به دامنه جهانی دسترسی دارند.

در واقع ، در جاوا اسکریپت ، همه توابع به دامنه “بالای” آنها دسترسی دارند.

JavaScript از توابع تو در تو پشتیبانی می کند. توابع تو در تو به دامنه “بالای” آنها دسترسی دارند.

در این مثال ، تابع داخلی plus()به counterمتغیر موجود در تابع اصلی دسترسی دارد:

مثال

function add() {
  let counter = 0;
  function plus() {counter += 1;}
  plus();   
  return counter;
}

اگر می توانستیم plus() از خارج به عملکرد برسیم ، این می توانست معضل مقابله ای را حل کند .

همچنین باید counter = 0فقط یکبار راهی برای اجرا پیدا کنیم .

ما به تعطیلی نیاز داریم.


تعطیلات جاوا اسکریپت

عملکردهای فراخوانی خود را به خاطر می آورید؟ این عملکرد چه کاری انجام می دهد؟

مثال

const add = (function () {
  let counter = 0;
  return function () {counter += 1; return counter}
})();

add();
add();
add();

// the counter is now 3

مثال توضیح داده شده

متغیر addبه مقدار برگشتی یک تابع خود فراخوانی اختصاص داده می شود.

عملکرد خودآزمایی فقط یکبار اجرا می شود. شمارنده را صفر (0) قرار می دهد و یک عبارت تابع را برمی گرداند.

از این طریق add به یک تابع تبدیل می شود. قسمت “شگفت انگیز” این است که می تواند در دامنه اصلی به شمارنده دسترسی پیدا کند.

این بسته شدن JavaScript نامیده می شود این امکان را برای یک تابع فراهم می کند تا متغیرهای ” خصوصی ” داشته باشد.

شمارنده توسط دامنه عملکرد ناشناس محافظت می شود و فقط با استفاده از تابع add قابل تغییر است.

بسته شدن ، تابعی است که حتی پس از بسته شدن عملکرد والد ، به دامنه اصلی دسترسی دارد.

منبع

مطالب مرتبط

0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها