JavaScript တွင် IIFE ၏ သတိမထားမိတတ်သော အချက်များ
ကုဒ်နမူနာ နှစ်ခုကို ကြည့်ရအောင်။
ပထမတစ်ခု။
let result = 1
+function() {
return 2;
}();
console.log(result);
ဒုတိယတစ်ခု။
let result = 1;
+function() {
return 2;
}();
console.log(result);
ဒီကုဒ် နှစ်ခုဟာ အတူတူနီးပါးဖြစ်ပေမယ့်
အလုပ်လုပ်ကြည့်ရင် ရလဒ်ကွဲပြားသွားပါတယ်။
ပထမ ကုဒ်က console တွင် ဂဏန်း 3 ကို ပြမယ်၊
ဒုတိယ ကုဒ်ကတော့ ဂဏန်း 1 ကို ပြပါလိမ့်မယ်။
ဘာကြောင့် ဒီလိုကွာခြားမှုဖြစ်ရတာလဲ။ အကြောင်းရင်းက ပထမ ကုဒ်ရဲ့ ပထမဆုံးလိုင်း နောက်ဆုံးမှာ semicolon (;) မပါဝင်ဘဲ၊ ဒုတိယ ကုဒ်မှာတော့ semicolon ပါနေလို့ပါပဲ။
သင် မေးကောင်းမေးနိုင်တယ်။ JavaScript မှာ command နောက်ဆုံးမှာ semicolon ထည့်ဖို့ မလိုအပ်ဘူးလား။ တကယ်တော့ အဲဒါက အတိအကျမမှန်ပါဘူး။ ဘာတွေတကယ်ဖြစ်နေလဲဆိုတာ နားလည်အောင် လုပ်ကြည့်ရအောင်။
ပထမ ကုဒ်ကို ဒီလိုပြန်ရေးလို့ရပါတယ်။
let result = 1 + function() {
return 2;
}();
console.log(result); // ပြမည့်ရလဒ် 3
အခုဆိုရင် ရှင်းလင်းသွားပါပြီ။ တစ် (1) ပေါင်းတယ်
တစ်ပြိုင်နက် အသုံးပြုသည့် function ရဲ့ ရလဒ်၊
ဆိုလိုတာက 2။ ဒါကြောင့် နောက်ဆုံးရလဒ်က 3 ဖြစ်မယ်။
၁ ရဲ့နောက်မှာ semicolon ထည့်လိုက်ရင်တော့ ကုဒ်ကို interpreter က နောက်တမျိုး နားလည်သွားပါလိမ့်မယ်။
// ပထမ command။
let result = 1;
// ဒုတိယ command။
+function() {
return 2;
}();
// တတိယ command။
console.log(result); // ပြမည့်ရလဒ် 1
ဆိုလိုတာက variable ထဲကို တန်ဖိုးထည့်တာနဲ့ function ကို တစ်ပြိုင်နက် အသုံးပြုတာဟာ ကွဲပြားတဲ့ command နှစ်ခု ဖြစ်သွားတယ်။ ဒါအားလုံးက semicolon ရှိနေလို့ပါ။
ဒီကိစ္စမှာ တစ်ပြိုင်နက် အသုံးပြုသည့် function က
ဘာမှမလုပ်ပါဘူး။ ဂဏန်း 2 ကို ပြန်ပေးပြီး
result variable အပေါ် ဘယ်လိုမှ သက်ရောက်မှုမရှိပါဘူး။
ဒါဆို JavaScript မှာ semicolon မထည့်လည်းရတယ်ဆိုတာ ဘာကြောင့်လဲ။ Semicolon မပါတဲ့ ဒီလို ကုဒ်ကို ကြည့်ရအောင်။
let result = 1 // result ထဲမှာ 1 ရေးမည်
let test = 2 // test ထဲမှာ 2 ရေးမည်
ဒီကုဒ်က မှန်ကန်စွာ အလုပ်လုပ်ပါတယ်။ ဘာကြောင့်လဲဆိုတော့ interpreter က ကိုယ်တိုင် လိုင်းတိုင်းရဲ့ နောက်ဆုံးမှာ semicolon ထည့်ပေးလိုက်လို့ပါ။
ဒါပေမယ့် ဒီလိုကုဒ်မျိုးကို ကြည့်ပါ။
let result = 1
+ 2; // result ထဲမှာ 3 ရေးမည်
အခုဆိုရင် ပထမလိုင်းရဲ့ နောက်ဆုံးမှာ semicolon ကို အလိုအလျောက် မထည့်တော့ပါဘူး။ ဘာကြောင့်လဲဆိုတော့ interpreter က ဒုတိယလိုင်းက command ဟာ ပထမလိုင်းက command ရဲ့ အစိတ်အပိုင်းတစ်ခုဖြစ်နေတယ်လို့ နားလည်သွားလို့ပါ။
ဒါပေမယ့် ကိုယ်တိုင် semicolon ထည့်လိုက်ရင်တော့ ရလဒ်က လုံးဝကွဲပြားသွားပါလိမ့်မယ်။
let result = 1; // result ထဲမှာ 1 ရေးမည်
+ 2; // command က ဘာမှမလုပ်ဘူး၊ ဒါပေမယ့် error လည်းမပေါ်ဘူး
ဆိုလိုတာက interpreter က semicolon ကို အလိုအလျောက်ထည့်ပေးတယ်၊ နောက် command ဟာ ရှေ့က command ရဲ့ အစိတ်အပိုင်းမဖြစ်ဘူးဆိုမှသာ။
ဒီကုဒ်ကို အခု ကြည့်ပါ။
let result = 1
+function() {
return 2;
}();
console.log(result);
တကယ်ပါပဲ။ ဒုတိယလိုင်းဟာ ပထမလိုင်း command ရဲ့ ရှေ့ဆက်လက်ဖြစ်စဉ်ပဲဖြစ်တယ်။ ဒါကြောင့် interpreter က semicolon ကို အလိုအလျောက် မထည့်တော့ပါဘူး။ ဒါကြောင့် ပထမလိုင်းနောက်ဆုံးမှာ ကိုယ်တိုင် semicolon ရေးလိုက်ရင် ရလဒ်က လုံးဝကွဲပြားသွားပါလိမ့်မယ်။ ဒါက ပြဿနာတွေရှောင်ရှားဖို့ လိုအပ်တဲ့နေရာတွေမှာ အမြဲတမ်း semicolon ထည့်သင့်တယ် လို့ ဆိုလိုတာပါ။