ECMAScript کلوز

یہ ECMAScript کا سب سے زیادہ بغیر وضاحت کا مقام، یہ بات ہے کہ یہ کلوز (closure) کا حمایتی ہے۔

کلوز، یعنی ایسا فونکشن جس میں لیکنسیائی نمائش شامل ہیں، جو محاسبه نہیں کئے گئے متغیرات کا استعمال کرسکتا ہے، یعنی فونکشن کسی فونکشن کے باہر کا متغیر استعمال کرسکتا ہے۔

سادہ کلوز مثال

ایسکریپٹ میں عالمی متغیر استعمال کرنا، ایک سادہ کلوز مثال ہے۔ منظر نامہ:

var sMessage = "hello world";
function sayHelloWorld() {
  alert(sMessage);
}
sayHelloWorld();

در کسی اس کد میں، اسکریپٹ کو میمری میں لوڈ کیا جاتا ہے، فونکشن sayHelloWorld() کے لئے متغیر sMessage کا مرتبہ نہیں محاسبه کیا جاتا ہے۔ اس فونکشن کا متغیر sMessage کا مرتبہ صرف مستقبل کے استعمال کے لئے محفوظ رکھا گیا ہے، یعنی تفسیر پروگرام جاسکتا ہے کہ فونکشن کو بولنے کے وقت sMessage کا مرتبہ چکنا چاہئے۔ sMessage فونکشن sayHelloWorld() کو بولنے کے وقت (آخری سطر) میں مرتبہ دیا جائے گا، اور پیغام "hello world" دکھایا جائے گا。

پیچیدہ کلوز مثال

ایک فونکشن میں دوسرے کو دفعہ کردینا، کلوز کو پیچیدہ بنادیتا ہے۔ مثلاً:

var iBaseNum = 10;
function addNum(iNum1, iNum2) {
  function doAdd() {
    return iNum1 + iNum2 + iBaseNum;
  }
  return doAdd();
}

یہاں، فونکشن addNum() میں doAdd() (کلوز) شامل ہے۔ داخلی فونکشن ایک کلوز ہے، کیونکہ وہ بیرونی فونکشن کے پارامتر iNum1 اور iNum2 اور عالمی متغیر iBaseNum کا مرتبہ حاصل کرتی ہے۔ addNum() کا آخری مرحلہ doAdd() کو فونکشن کال کرتا ہے، دو پارامتر اور عالمی متغیر کو جمع کرتا ہے اور ان کا مجموعہ واپس لئی جاتا ہے。

مهم مفہوم یہ ہے کہ doAdd() فونکشن کو کوئی پارامتر نہیں دیا جاتا، وہ استعمال کیا جانے والا مرتبہ اسکریپت کی کاری کے ماحول سے حاصل کیاجاتا ہے。

دید جاسکتا ہے کہ کلوز ایسکریپٹ میں بہت مضبوط اور عام حصہ ہیں، جو پیچیدہ حساب و کتاب کا استعمال کرسکتے ہیں。

نکاتی:جیسا کہ کسی اعلیٰ فونکشن کا استعمال کیا جاتا ہے، کلوز کا استعمال کیجئے، کیونکہ وہ بہت پیچیدہ بن سکتے ہیں。