تێگەیشتن لە Closures
لە زمانی جاڤاسکریپتدا، کلۆژەر (Closure) یەکێکە لە گرنگترین و بەهێزترین چەمکەکان. بە کورتی، کلۆژەر بریتییە لە توانای فەنکشنێک بۆ دەستگەیشتن بەو گۆڕاوانەی کە لە مەودای (Scope) دەرەوەی خۆیدان، تەنانەت دوای ئەوەی ئەو مەودایە کارکردنی تەواو بووە.
چۆنیەتی کارکردنی کلۆژەر
کاتێک فەنکشنێک دروست دەکەین، ئەو فەنکشنە "ژینگەی" خۆی لەبیر ناکات. کاتێک فەنکشنێکی ناوخۆیی دەگەڕێنینەوە (return)، ئەو فەنکشنە دەستگەیشتنی بە هەموو ئەو گۆڕاوانە دەبێت کە لە فەنکشنە دەرەکییەکەدا هەبوون.
function createGreeting(message) {
return function(name) {
console.log(message + ', ' + name);
};
}
const sayHello = createGreeting('سڵاو');
sayHello('ئەحمەد'); // دەرەنجام: سڵاو, ئەحمەد
لە نموونەکەی سەرەوەدا، کاتێک createGreeting تەواو بوو، دەبوو گۆڕاوی message لەبیر بکرێت، بەڵام بەهۆی کلۆژەرەوە، sayHello هێشتا دەتوانێت دەستی پێ بگات.
دروستکردنی گۆڕاوی تایبەت (Private Variables)
یەکێک لە بەکارهێنانە سەرەکییەکانی کلۆژەر ئەوەیە کە ڕێگری بکەین لە دەستکاریکردنی گۆڕاوەکان لە دەرەوەی فەنکشنەکە. ئەمە پێی دەوترێت Encapsulation.
function createCounter() {
let count = 0; // ئەم گۆڕاوە لە دەرەوە نابینرێت
return {
increment: function() { count++; console.log(count); },
decrement: function() { count--; console.log(count); }
};
}
const myCounter = createCounter();
myCounter.increment(); // 1
myCounter.increment(); // 2
console.log(myCounter.count); // undefined (چونکە تایبەتە)
لێرەدا count پارێزراوە و تەنها لە ڕێگەی فەنکشنەکانی increment و decrement دەتوانرێت دەستکاری بکرێت.
ئاگاداری لە بەکارهێنانی کلۆژەر
بەکارهێنانی کلۆژەر لە ناو Loop
یەکێک لە هەڵە باوەکان کاتێکە کە کلۆژەر لەگەڵ var لەناو for loop بەکاردێت. بەکارهێنانی let کێشەکە چارەسەر دەکات چونکە let مەودایەکی تایبەتی بۆ هەر خولێک دروست دەکات.
for (let i = 1; i <= 3; i++) {
setTimeout(function() {
console.log('ژمارە: ' + i);
}, 1000);
}
// دەرەنجام: 1, 2, 3 بەدوای یەکدا
کورتەیەک لەسەر سوودەکانی کلۆژەر
- پاراستنی داتا و دروستکردنی گۆڕاوی تایبەت.
- ئاسانکاری لە دروستکردنی فەنکشنەکان (Factory Functions).
- بەهێزکردنی کۆد لە ڕووی ئەندازیارییەوە.
ئەرکی ماڵەوە (تمرین)
هەوڵ بدە فەنکشنێک دروست بکەیت بە ناوی createBank کە بڕێک پارەی سەرەتایی وەربگرێت (بۆ نموونە 1000). پاشان دوو فەنکشن بگەڕێنێتەوە: یەکێکیان بۆ زیادکردنی پارە (deposit) و ئەوی تریان بۆ کەمکردنەوەی پارە (withdraw). دڵنیابە کە گۆڕاوی پارەکە لە دەرەوە نەبینرێت.