JavaScriptда Исмли Функционал Ифодалар
Фарз қилайлик, бизда шундай функционал ифода бор:
let test = function() {
console.log('!');
};
test(); // '!' чиқариб беради
Келинг, бизнинг функциямизга func номини берейлик:
let test = function func() {
console.log('!');
};
test();
Сиз биллагинингиздек, бу ном орқали функцияга муроожат қилиб бўлмайди:
let test = function func() {
console.log('!');
};
test(); // '!' чиқариб беради
func(); // хатоликни келтириб чиқаради
Энди нега функцияга ном бериш керак, агар унга ташқаридан кириш имкони бўлмаса? Гал шундаки, бу ном функция ташқарисида эмас, лекин функция ичида дастур билан ишлатиш мумкин.
Келинг, текшириб кўрамиз:
let test = function func() {
console.log(func); // функция ўзининг бошланғич кодини чиқариб беради
};
test(); // функцияни чақирамиз
Келинг, функцияни ўзининг ичида чақириб кўрамиз:
let test = function func() {
console.log('!'); // '!' чиқариб беради
func(); // ўзимизни чақирамиз
};
test();
Агар бу кодни ишга туширсак, консолга чексиз микдорда чиқишлар амалга ошади.
Аслида, бизнинг функциямиз ўзининг ичида наътики
func сифатидагина эмас, балки
test сифатида ҳам чақирилиши мумкин:
let test = function func() {
console.log('!');
test(); // ўзимизни чақирамиз
};
test();
Фарқ нимада? Фарқ шундаки, test номи
- бу жудагина ўзгарувчи. Скрипт ишлаш жараёнида
бизнинг функция бошқа ўзгарувчига ёзилиши ёки
параметр сифатида ўтказилиши мумкин
- бу ҳолда test ўзгарувчиси ва функция
ўртасидаги алоқа йўқолиши мумкин.
func номи эса, айнан функция ичида ўзига
муроожат қилиш имкони бўлиши учун, қаттиқ функцияга
богланган.
Функция номи билан ифодаланган шундай Function Expressionлар исмли функционал ифодалар деб номинади.