JavaScript ရှိ Function Expressions ၏ အသေးစိတ်အချက်များ
Function Expression ဟူသော အမည်ကို အလဟဿမပေးထားခြင်းဖြစ်သည်။ ၎င်းသည် တကယ်ပင် ဆိုလိုသည်မှာ ထိုကဲ့သို့သော function များသည် expression တစ်ခုခု၏ အစိတ်အပိုင်းတစ်ခု ဖြစ်နေခြင်းကို ဆိုလိုသည်။
ဥပမာအားဖြင့်၊ ကျွန်ုပ်တို့သည် string တစ်ခုခုကို အမည်မဲ့ function တစ်ခုနှင့် ပေါင်းနိုင်သည်။
let str = 'str' + function() {return 3;};
console.log(str); // 'strfunction() {return 3;}' ကို ထုတ်ပြမည်
ကျွန်ုပ်တို့သည် ကိန်း 3 မဟုတ်ဘဲ ထူးဆန်းသောရလဒ်ကို မြင်ရသည်မှာ ဘာကြောင့်နည်း။ ဘာကြောင့်ဆိုသော် ဒုတိယပေါင်းလဒ်သည် function ၏ အလုပ်လုပ်သည့်ရလဒ်မဟုတ်ဘဲ ၎င်း၏ မူရင်းကုဒ် ဖြစ်နေသောကြောင့်ဖြစ်သည် (ကျွန်ုပ်တို့သည် ထို function ကို ခေါ်ယူအသုံးပြုခြင်းမပြုဘဲ ရေးသားထားသည့်အတွက်ဖြစ်သည်)။
ဆိုလိုသည်မှာ functional expression ဟူသော အမည်သည် ထိုကဲ့သို့သော function သည် expression တစ်ခုခုတွင် ပါဝင်ပတ်သက်နေသည်ကို ဖော်ပြသည်။
ကိန်းရှင်တစ်ခုသို့ သတ်မှတ်ပေးခြင်းသည်လည်း expression တစ်ခုဖြစ်သည်။
let func = function() {
console.log('!');
};
ဥပမာအားဖြင့်၊ function ကို console.log အတွင်း parameter တစ်ခုအဖြစ် ပို့ပေးနိုင်ပြီး ၎င်းက console ထဲတွင် function ၏ မူရင်းကုဒ်ကို ထုတ်ပြမည် - ထိုသို့ပြုလုပ်ခြင်းသည်လည်း expression တစ်ခုဟု ယူဆပါသည်။
console.log(function() {return 3;});
ဤအချက်သည် အဘယ်ကြောင့် အရေးကြီးသနည်း။ အဘယ်ကြောင့်ဆိုသော် Function Declaration နှင့် Function Expression ၏ ခြားနားချက်သည် ပထမ function သည် အမည်တစ်ခုနှင့် ဖန်တီးပြီး ဒုတိယ function သည် အစကတည်းက အမည်မရှိခြင်း မဟုတ်သောကြောင့်ဖြစ်သည်။ ထိုသို့မဟုတ်ပါ။
ဥပမာ။ ဤနေရာတွင် function တစ်ခုသည် အမည်မရှိသော်လည်း မည်သည့် expression တွင်မှ ပါဝင်မနေပါ (ရိုးရိုးရှင်းရှင်းပြောရလျှင် ၎င်းနှင့် မည်သည့်လုပ်ဆောင်ချက်ကိုမှ ပြုလုပ်ခြင်းမရှိပါ)။
/*
ဤ function သည် Function Declaration ဖြစ်သော်လည်း
syntax error ရှိနေမည်။
*/
function() {
console.log('!');
}
ထိုကဲ့သို့သော ကုဒ်သည် error တစ်ခုကို ပေးမည်။ အဘယ်ကြောင့်နည်း။ function သည် မည်သည့် expression တွင်မှ ပါဝင်မနေသောကြောင့် browser က ၎င်းကို Function Declaration အဖြစ် ယူဆသော်လည်း ၎င်း၏ အမည်ကို မတွေ့ရှိသဖြင့် error ကို ထုတ်ပေးခြင်းဖြစ်သည်။
Error ပျောက်ကွယ်သွားစေရန် function အား expression တစ်ခုခု၏ အစိတ်အပိုင်းတစ်ခု ဖြစ်အောင် ပြုလုပ်ရန် လိုအပ်သည်။ ဥပမာအားဖြင့် ၎င်း၏ ရှေ့တွင် + လုပ်ဆောင်ချက်ကို ရေးကြည့်ပါမည်။
+function() { // ထိုကဲ့သို့သော ကုဒ်သည် မှန်ကန်သည်
console.log('!');
};
ဤသို့အလုပ်လုပ်ပုံ။ + လုပ်ဆောင်ချက် ကိုယ်တိုင်သည် ဘာမှမလုပ်ပါ၊ ၎င်းသည် ကိန်း +3 ကို ကိန်း 3 အစားရေးခြင်းနှင့် အတူတူပင်ဖြစ်သည် - ခွင့်ပြုထားသော်လည်း ဘာမှမပြောင်းလဲပါ။
သို့သော် function နှင့်ပတ်သက်လာလျှင် - ၎င်းသည် ပြောင်းလဲစေသည်။ ယခု ကျွန်ုပ်တို့၏ function သည် ရိုးရိုးရေးထားခြင်းမဟုတ်တော့ဘဲ expression တစ်ခုတွင် ပါဝင်နေပါသည်။ ထို့ကြောင့် error ဖြစ်မည်မဟုတ်ပါ။ function ကို ခေါ်ယူအသုံးပြုခြင်းမပြုဘဲ ရေးသားထားသည့်အတွက် function ၏ အလုပ်လုပ်သည့်ရလဒ်လည်း ရှိမည်မဟုတ်ပါ။
+ အစား မည်သည့်အရာကိုမဆို ရေးနိုင်သည်။
ဥပမာအားဖြင့်။
-function() { // ထိုကဲ့သို့သော ကုဒ်သည် မှန်ကန်သည်
console.log('!');
};
!function() { // ထိုကဲ့သို့သော ကုဒ်သည် မှန်ကန်သည်
console.log('!');
};
ကျွန်ုပ်တို့၏ function ကို ကွင်းစကွင်းပိတ်ထဲသို့ ထည့်နိုင်သည်၊ ထိုအခါ ၎င်းသည်လည်း functional expression တစ်ခု ဖြစ်လာမည်ဖြစ်သည်။
(function() { // ထိုကဲ့သို့သော ကုဒ်သည် မှန်ကန်သည်
console.log('!');
});
ဖော်ပြထားသော function သည် Function Declaration သို့မဟုတ် Function Expression ဖြစ်မဖြစ် သတ်မှတ်ပါ။
function func() {
console.log('!');
}
ဖော်ပြထားသော function သည် Function Declaration သို့မဟုတ် Function Expression ဖြစ်မဖြစ် သတ်မှတ်ပါ။
let func = function() {
console.log('!');
}
ဖော်ပြထားသော function သည် Function Declaration သို့မဟုတ် Function Expression ဖြစ်မဖြစ် သတ်မှတ်ပါ။
+function() {
console.log('!');
}
ဖော်ပြထားသော function သည် Function Declaration သို့မဟုတ် Function Expression ဖြစ်မဖြစ် သတ်မှတ်ပါ။
!function func() {
console.log('!');
}
ဖော်ပြထားသော function သည် Function Declaration သို့မဟုတ် Function Expression ဖြစ်မဖြစ် သတ်မှတ်ပါ။
-function func() {
console.log('!');
}
ဖော်ပြထားသော function သည် Function Declaration သို့မဟုတ် Function Expression ဖြစ်မဖြစ် သတ်မှတ်ပါ။
1 + function func() {
console.log('!');
}
ဖော်ပြထားသော function သည် Function Declaration သို့မဟုတ် Function Expression ဖြစ်မဖြစ် သတ်မှတ်ပါ။
(function func() {
console.log('!');
})
ဖော်ပြထားသော function သည် Function Declaration သို့မဟုတ် Function Expression ဖြစ်မဖြစ် သတ်မှတ်ပါ။
console.log(
function() {
console.log('!');
}
);