JavaScript တွင် Closure များဖြင့် ကောင်တာ
ကျွန်ုပ်တို့ကြည့်ရှုထားသောကုဒ်ကို
ပြန်လာသည့်လုပ်ဆောင်ချက်သည် အကြိမ်တိုင်း
num ကိန်းရှင်၏တန်ဖိုးကို တစ်ခုစီ
တိုးပေးစေရန် ပြန်ရေးကြည့်ပါ။
function test() {
let num = 1;
return function() {
console.log(num);
num++; // တစ်ခုထည့်ပေါင်းသည်
}
}
let func = test();
ထိုသို့ဆိုလျှင် func လုပ်ဆောင်ချက်ကို
ခေါ်ယူသည့်အကြိမ်တိုင်းသည် console တွင်
တန်ဖိုးအသစ်ကို ပြသပေးမည်။
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); // 1 ကိုပြမည်
func(); // 2 ကိုပြမည်
func(); // 3 ကိုပြမည်
func(); // 4 ကိုပြမည်
func(); // 5 ကိုပြမည်
ကျွန်ုပ်တို့သည် closure ကို အသုံးပြု၍ (ပိုမိုတိကျစွာပြောရလျှင်
ကျွန်ုပ်တို့၏လုပ်ဆောင်ချက်၏ closure မှ num ကိန်းရှင်ကို အသုံးပြု၍)
လုပ်ဆောင်ချက်ခေါ်ယူမှု ကောင်တာကို အကောင်အထည်ဖော်ပြီးဖြစ်သည်။
test လုပ်ဆောင်ချက်ကို ခေါ်ယူသည့်အကြိမ်တိုင်းသည်
ကိုယ်ပိုင် closure ရှိသည့် လုပ်ဆောင်ချက်အသစ်ကို
ပြန်ပေးမည်ကို သတိပြုပါ။ ဆိုလိုသည်မှာ ကောင်တာများကွဲပြားစွာ
လွတ်လပ်စွာ အလုပ်လုပ်ကြမည်ဖြစ်သည်။
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // ပထမကောင်တာ
func1(); // 1 ကိုပြမည်
func1(); // 2 ကိုပြမည်
let func2 = test(); // ဒုတိယကောင်တာ
func2(); // 1 ကိုပြမည်
func2(); // 2 ကိုပြမည်
ထိုသို့ဆိုလျှင် တူညီသော num ကိန်းရှင်သည်
လုပ်ဆောင်ချက်များကွဲပြားလျှင် တန်ဖိုးမတူညီသော ကိန်းရှင်များအဖြစ် ရှိနေမည်။
ဆိုလိုသည်မှာ ကျွန်ုပ်တို့သည် test လုပ်ဆောင်ချက်ကို
နှစ်ကြိမ်ခေါ်ယူလျှင်၊ ၎င်းမှရရှိလာသော လုပ်ဆောင်ချက်များသည်
လွတ်လပ်စွာအလုပ်လုပ်ပြီး ထိုလုပ်ဆောင်ချက်တစ်ခုစီတွင်
ကိုယ်ပိုင် num ကိန်းရှင်လွတ်လပ်စွာ ရှိနေမည်ဖြစ်သည်။
ကိုယ့်ဘာသာကိုယ်၊ ကျွန်ုပ်၏ကုဒ်ထဲသို့ မကြည့်ဘဲ၊ closure များပေါ်တွင် အလုပ်လုပ်သော လုပ်ဆောင်ချက်ခေါ်ယူမှု ကောင်တာကို အကောင်အထည်ဖော်ပါ။
Closure အတွင်းရှိ လုပ်ဆောင်ချက်သည် 10 ကိန်းကို သိမ်းထားပါစေ။
လုပ်ဆောင်ချက်ကို ခေါ်ယူသည့်အကြိမ်တိုင်းသည် ဤကိန်းကို
1 ဖြင့် လျှော့ချပြီး လျှော့ချထားသောကိန်းကို console တွင်
ပြသစေရန် ပြုလုပ်ပါ။
0 အထိ ရေတွက်မှု ရောက်ရှိပြီးနောက် နောက်ထပ်
လုပ်ဆောင်ချက်ခေါ်ယူမှုတိုင်းသည် console တွင်
ရေတွက်မှု ပြီးဆုံးကြောင်း မက်ဆေ့ဂျ်ကို ပြသစေရန်
ယခင်အလုပ်ကို ပြုပြင်မွမ်းမံပါ။