جسٹسکریپٹ کا کلوزور

JavaScript متغیرین تعلق داردمحلییاجهانیمحدوده‌ها.

می‌توانند از طریقبند بستگیمحلی (خصوصی) را انجام دهند.

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

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

مثال

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

خود بچارو

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

مثال

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

خود بچارو

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

در وب‌سایت، متغیرهای جهانی به ویندوز تعلق دارند.

متغیرهای جهانی می‌توانند توسط همه اسکریپت‌های موجود در صفحه (و ویندوز) استفاده و تغییر شوند.

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

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

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

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

زندگی متغیرها

متغیرهای جهانی به مدت زمانی مشابه برنامه شما (ویندوز، وب‌سایت) زندگی می‌کنند.

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

مشکل یک حسابگر

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

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

مثال

// تنظیم اولیه حسابگر
ویرئیبل کاؤنٹر = 0;
// توابعی که حسابگر را افزایش می‌دهند
function add() {
  counter += 1;
}
// سه بار add() فراخوانی شود
ایڈ();
ایڈ();
ایڈ();
// در اینجا باید حسابگر 3 باشد

خود بچارو

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

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

مثال

// تنظیم اولیه حسابگر
ویرئیبل کاؤنٹر = 0;
// توابعی که حسابگر را افزایش می‌دهند
function add() {
  ویرئیبل کاؤنٹر = 0; 
  counter += 1;
}
// سه بار add() فراخوانی شود
ایڈ();
ایڈ();
ایڈ();
// در اینجا باید حسابگر 3 باشد. اما 0 است.

خود بچارو

این بی‌فایده است، زیرا ما حسابگر جهانی را به جای حسابگر محلی نمایش می‌دهیم.

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

مثال

// توابعی که حسابگر را افزایش می‌دهند
function add() {
  ویرئیبل کاؤنٹر = 0; 
  counter += 1;
  رین کاؤنٹر;
}
// سه بار add() فراخوانی شود
ایڈ();
ایڈ();
ایڈ();
// در اینجا باید حسابگر 3 باشد. اما 1 است.

خود بچارو

این بی‌فایده است، زیرا هر بار که توابع را فراخوانی می‌کنیم، حسابگر محلی ما را مجدداً تنظیم می‌کنیم.

توابع داخلی جاوااسکریپت می‌توانند این مشکل را حل کنند.

توابع جاسازی شده جاوااسکریپت

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

در واقع، در جاوااسکریپت، همه توابع حق دسترسی به محدوده‌های «بالاتر» خود را دارند.

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

در این مثال، توابع داخلی پلس () ممکن است به متغیر پدر تابع دسترسی داشته باشد counter حسابگر متغیر:

مثال

function add() {
    ویرئیبل کاؤنٹر = 0;
    function plus() {counter += 1;}
    plus();     
    رین کاؤنٹر; 
}

خود بچارو

یہ طرح سے کاؤنٹر دشواری کو حل کرسکتا ہے، اگر ہم سے باہر سے اس کو رسائی حاصل کرسکتے ہیں پلس () فنکشن

یہی وجہ سے صرف ایک بار چلنے والا فنکشن کی ضرورت ہے کاؤنٹر = 0 طریقہ میں

ہمیں بند بستگی (کلوژ) کی ضرورت ہے。

جسٹسکریپٹ کا کلوزور

یاد رکھتا ہو، خود کار فنکشن کیا کرتا ہے؟ یہ فنکشن کیا کرتا ہو؟

مثال

ویرئیبل ایڈ = (فنکشن () {
    ویرئیبل کاؤنٹر = 0;
    رین ڈومینک فنکشن () {رین کاؤنٹر += 1;}
})();
ایڈ();
ایڈ();
ایڈ();
// کاؤنٹر اب 3 ہوگا 

خود بچارو

مثال کی توجیہ

ویرئیبل ایڈ فنکشن کا واپسی خود کار فنکشن کی واپسی کا ہے

یہ خود کا فنکشن صرف ایک بار چلتی ہے، یہ کاؤنٹر کو صفر (0) سیٹ کرتا ہے اور فنکشن ایکسپریشن براہ راست واپس براہ راست واپس کرتا ہے。

یہ طرح سے فنکشن 'ایڈ' کو فنکشن بنادیا جاتا ہے، سب سے بڑا حصہ یہ ہے کہ وہ پیر ایکشن اسکریپٹ میں کاؤنٹر تک رسائی رکھ سکتا ہے。

یہ جسٹا اسکریپٹ کا نام دیا جاتا ہے بند بستگییہ واضح کرتا ہے کہ فنکشن کو 'پرائیویٹآئی وی آر اینگل میں ممکن ہوتی ہے

کاؤنٹر کا استعمال اس نامشخص فنکشن کا دائرہ کار میں محفوظ ہے، اور صرف 'ایڈ' فنکشن کا استعمال کیا جاسکتا ہے تاکہ کاؤنٹر کو ترمیم کیا جاسکے。

بند بستگی واضح ہوتی ہے، جو پیر ایکشن اسکریپٹ تک رسائی رکھتی ہے، جس کا خاتمہ ہو چکا ہو。