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('!');
}
Мындай код жалпысынан ката чыгарат! Эмне үчүн: функция кандайдыр бир туюнтмага катышпагандыктан, браузер аны Function Declaration деп эсептейт, бирок анын атын таппайт жана ката чыгарат.
Ката жоголушу үчүн, функцияны кандайдыр бир туюнтманын бир бөлүгү болушуна мажбур кылыш керек. Мисалы, анын алдына + амалын жазалы:
+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('!');
}
);