JavaScript да функционал ифодаларининг нюанслари
Function Expression номи беҳуда берилган эмас. Бу ҳақиқатан ҳам шунни англатади - бундай функциялар бирон ифоданинг бир қисми бўлиши.
Масалан, биз бирон сатрни номсиз функцияга қўшишимиз мумкин:
let str = 'str' + function() {return 3;};
console.log(str); // 'strfunction() {return 3;}' чиқади
Нега биз 3 сонини эмас, бундай ғалати натижани кўрамиз? Чунки иккинчи қўшилувчи - бу функциянинг ишлаш натижаси эмас, балки унинг бошланғич коди (ахоли биз у функцияни чақирмадик, фақат ёздик).
Яъни функционал ифода номи шунни англатадики, бундай функция бирон ифодада иштирок этади.
Ўзгарувчига тенглаш ҳам ифодадир:
let func = function() {
console.log('!');
};
Масалан, функцияни console.log га параметр сифатида ўтказшимиз мумкин ва у унинг бошланғич кодини консолга чиқаради - бу ҳам ифода ҳисобланади:
console.log(function() {return 3;});
Нега бу муҳим: чунки Function Declaration ва Function Expression нинг фарқи ҳақиқатан ҳам биринчи функция ном билан яратилиши, иккинчиси эса бошланғичда номга эга эмаслигида эмас. Бундай эмас.
Мисол. Мана, бизда номсиз функция, лекин ҳеч қандай ифодада иштирок этмайди (яъни унга ҳеч қандай ҳаркатлар бажорилмайди, оддий ҳаркатларда):
/*
Бу функция Function Declaration бўлади,
лекин синтактик хатолик билан:
*/
function() {
console.log('!');
}
Бундай код умуман хатолик берadi! Нега: чунки функция ҳеч қандай ифодада иштирок этмагани учун, браузер уни Function Declaration деб ҳисоблайди, лекин унинг номини топа олмайди ва хатолик берadi.
Хатолик йўқолиши учун, функцияни бирон ифоданинг бир қисми бўлишига мажбурлашимиз керак. Масалан, унинг олдига + операциясини ёзамиз:
+function() { // бундай код тўғри
console.log('!');
};
Бу қандай ишлаяпти: + операцияси ўзи ҳеч нарса қилмайди, бу 3 ўрнига +3 ёзишга ўхшайди - рухсат этилган, лекин ҳеч нарсани ўзгартирмайди.
Лекин функция ҳолида - ўзгартиради. Энди бизнинг функциямиз фақат ёзилган эмас, балки ифодада иштирок этмоқда. Шу сабабдан энди хатолик бўлмайди. Функциянинг ишлаш натижаси ҳам бўлмайди, чунки биз уни фақат ёздик, лекин чақирмадик.
+ ўрнига ҳар қандай нарсани ёзишимиз мумкин. Масалан:
-function() { // бундай код тўғри
console.log('!');
};
!function() { // бундай код тўғри
console.log('!');
};
Шунингдек, биз функциямизни айлана рақамли қавсга олишимиз мумкин, бу ҳолда у ҳам функционал ифодага айланади:
(function() { // бундай код тўғри
console.log('!');
});
Кўрсатилган функция Function Declaration ёки Function Expression эканлигини аниқланг:
function func() {
console.log('!');
}
Кўрсатилган функция Function Declaration ёки Function Expression эканлигини аниқланг:
let func = function() {
console.log('!');
}
Кўрсатилган функция Function Declaration ёки Function Expression эканлигини аниқланг:
+function() {
console.log('!');
}
Кўрсатилган функция Function Declaration ёки Function Expression эканлигини аниқланг:
!function func() {
console.log('!');
}
Кўрсатилган функция Function Declaration ёки Function Expression эканлигини аниқланг:
-function func() {
console.log('!');
}
Кўрсатилган функция Function Declaration ёки Function Expression эканлигини аниқланг:
1 + function func() {
console.log('!');
}
Кўрсатилган функция Function Declaration ёки Function Expression эканлигини аниқланг:
(function func() {
console.log('!');
})
Кўрсатилган функция Function Declaration ёки Function Expression эканлигини аниқланг:
console.log(
function() {
console.log('!');
}
);