ÐÐ»Ñ JavaScript ÑÑнкÑÑÑ â Ñе не âмагÑÑна мовна ÑÑÑÑкÑÑÑаâ, а знаÑÐµÐ½Ð½Ñ Ð¾Ñобливого ÒаÑÑнкÑ.
СинÑакÑиÑ, Ñо ми ÑанÑÑе викоÑиÑÑовÑвали, називаÑÑÑÑÑ ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ (Function Declaration):
function sayHi() {
alert( "ÐÑивÑÑ" );
}
ÐÑнÑÑ Ð¹ ÑнÑий ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ ÑÑвоÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ, Ñо називаÑÑÑ Ð¤ÑнкÑÑоналÑним ÐиÑазом (Function Expression).
ÐÑн дозволÑÑ ÑÑвоÑÑваÑи ÑÑнкÑÑÑ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ Ð±ÑдÑ-Ñкого виÑазÑ.
ÐапÑиклад:
let sayHi = function() {
alert( "ÐÑивÑÑ" );
};
Ðи баÑимо змÑÐ½Ð½Ñ sayHi. Як знаÑÐµÐ½Ð½Ñ Ñй пÑиÑвоÑÑÑÑÑÑ Ð½Ð¾Ð²Ð° ÑÑнкÑÑÑ function() { alert("ÐÑивÑÑ"); }.
ÐÑкÑлÑки ÑÑвоÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ Ð²ÑдбÑваÑÑÑÑÑ Ð² конÑекÑÑÑ Ð¿ÑиÑвоÑÐ½Ð½Ñ Ð²Ð¸ÑÐ°Ð·Ñ (пÑавоÑÑÑ Ð²Ñд =), Ñе називаÑÑÑÑÑ Ð¤ÑнкÑÑоналÑним виÑазом (Function Expression).
ÐаÑважÑе, пÑÑÐ»Ñ ÐºÐ»ÑÑового Ñлова function Ð½ÐµÐ¼Ð°Ñ Ð½Ð°Ð·Ð²Ð¸ ÑÑнкÑÑÑ. ÐÐ»Ñ ÑÑнкÑÑоналÑниÑ
виÑазÑв Ñе допÑÑÑимо.
Ð ÑÑÐ¾Ð¼Ñ Ð¿ÑикладÑ, ми одÑÐ°Ð·Ñ Ð¿ÑиÑвоÑÑмо ÑÑнкÑÑÑ ÑÑй змÑннÑй, Ñож, ÑнакÑе кажÑÑи, код в пÑÐ¸ÐºÐ»Ð°Ð´Ñ âÑÑвоÑÑÑ ÑÑнкÑÑÑ Ñ ÐºÐ»Ð°Ð´Ðµ ÑÑ Ð² змÑÐ½Ð½Ñ sayHiâ.
Ð ÑкладнÑÑÐ¸Ñ ÑиÑÑаÑÑÑÑ , з Ñкими ми ÑÑикнемоÑÑ Ð¿ÑзнÑÑе, ÑÑнкÑÑÑ Ð¼Ð¾Ð¶Ð½Ð° ÑÑвоÑиÑи Ñа вÑдÑÐ°Ð·Ñ Ð¶ викликаÑи або запланÑваÑи ÑÑ Ð½Ð° вÑдÑеÑмÑноване виконаннÑ. Ð¢Ð°ÐºÑ ÑÑнкÑÑÑ Ð½Ñде не збеÑÑгаÑÑÑÑÑ, ÑÐ¾Ð¼Ñ Ð²Ð¾Ð½Ð¸ залиÑаÑÑÑÑÑ Ð°Ð½Ð¾Ð½Ñмними.
ФÑнкÑÑÑ â Ñе знаÑеннÑ
ÐовÑоÑÑмо: Ð½ÐµÐ¼Ð°Ñ Ð·Ð½Ð°ÑеннÑ, Ñким Ñином ÑÑвоÑено ÑÑнкÑÑÑ, ÑÑнкÑÑÑ â Ñе завжди знаÑеннÑ. РобоÑ
пÑикладаÑ
виÑе, ÑÑнкÑÑÑ Ð·Ð±ÐµÑÑгаÑÑÑÑÑ Ð² змÑннÑй sayHi.
Ðи навÑÑÑ Ð¼Ð¾Ð¶ÐµÐ¼Ð¾ вивеÑÑи Ñе знаÑеннÑ, викоÑиÑÑовÑÑÑи alert:
function sayHi() {
alert( "ÐÑивÑÑ" );
}
alert( sayHi ); // показÑÑ ÐºÐ¾Ð´ ÑÑнкÑÑÑ
ÐаÑважÑе, Ñо оÑÑаннÑй ÑÑдок не Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ ÑÑнкÑÑÑ ÑомÑ, Ñо пÑÑÐ»Ñ sayHi Ð½ÐµÐ¼Ð°Ñ Ð´Ñжок. ÐÑнÑÑÑÑ Ð¼Ð¾Ð²Ð¸ пÑогÑамÑваннÑ, в ÑкиÑ
бÑдÑ-Ñке звеÑÑÐ°Ð½Ð½Ñ Ð´Ð¾ ÑÐ¼ÐµÐ½Ñ ÑÑнкÑÑÑ ÑпÑиÑинÑÑ ÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ, але JavaScript â не одна з ниÑ
.
У JavaScript ÑÑнкÑÑÑ â Ñе знаÑеннÑ, ÑÐ¾Ð¼Ñ Ð¼Ð¸ можемо поводиÑиÑÑ Ð· неÑ, Ñк Ñ Ð· ÑнÑими знаÑеннÑми. Ðод виÑе показÑÑ ÑÑ ÑÑдкове пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ â Ð²Ð¸Ñ Ñдний код.
ÐвиÑайно, ÑÑнкÑÑÑ â оÑобливе знаÑеннÑ, Ñ ÑÐ¾Ð¼Ñ ÑенÑÑ, Ñо ми можемо здÑйÑниÑи ÑÑ Ð²Ð¸ÐºÐ»Ð¸Ðº за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð´Ñжок: sayHi().
Ðле Ñе вÑе-Ñаки знаÑеннÑ. Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ можемо пÑаÑÑваÑи з неÑ, Ñк Ñ Ð· ÑнÑими знаÑеннÑми.
СкажÑмо, ми можемо ÑкопÑÑваÑи ÑÑнкÑÑÑ Ð² ÑнÑÑ Ð·Ð¼ÑннÑ:
function sayHi() { // (1) ÑÑвоÑÑÑмо
alert( "ÐÑивÑÑ" );
}
let func = sayHi; // (2) копÑÑÑмо
func(); // ÐÑивÑÑ // (3) викликаÑмо копÑÑ (пÑаÑÑÑ!)
sayHi(); // ÐÑивÑÑ // оÑÑ Ñак Ñеж ÑпÑаÑÑÑ (а ÑÐ¾Ð¼Ñ Ð½Ñ?)
РозглÑнемо деÑалÑно, Ñо ÑÑÑ Ð²ÑдбÑлоÑÑ:
- ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ
(1)ÑÑвоÑÑÑ ÑÐ°Ð¼Ñ ÑÑнкÑÑÑ Ñ ÐºÐ»Ð°Ð´Ðµ ÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ñ Ð·Ð¼ÑннÑsayHi. - Ð Ñдок
(2)копÑÑÑ Ñе знаÑÐµÐ½Ð½Ñ Ð² змÑннÑfunc. Ще Ñаз заÑважÑе: пÑÑлÑsayHiÐ½ÐµÐ¼Ð°Ñ Ð´Ñжок. Якби вони Ñам бÑли, ÑодÑfunc = sayHi()запиÑав би ÑезÑлÑÑÐ°Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑsayHi()Ñfunc, а не ÑÐ°Ð¼Ñ ÑÑнкÑÑÑsayHi. - Ð¢ÐµÐ¿ÐµÑ Ð¼Ð¸ можемо викликаÑи ÑÑнкÑÑÑ Ð´Ð²Ð¾Ð¼Ð° ÑлÑÑ
ами:
sayHi()абоfunc().
Також ми могли викоÑиÑÑаÑи ФÑнкÑÑоналÑний ÐиÑаз Ñ Ð¿ÐµÑÑÐ¾Ð¼Ñ ÑÑдкÑ, Ñоб визнаÑиÑи sayHi:
let sayHi = function() { // (1) ÑÑвоÑиÑи
alert( "ÐÑивÑÑ" );
};
let func = sayHi;
// ...
РезÑлÑÑÐ°Ñ Ð±Ñв би Ñаким Ñамим.
Ðи можеÑе запиÑаÑи, ÑÐ¾Ð¼Ñ Ð¤ÑнкÑÑоналÑний ÐиÑаз мÑÑÑиÑÑ ÐºÑÐ°Ð¿ÐºÑ Ð· ÐºÐ¾Ð¼Ð¾Ñ ; в кÑнÑÑ, а ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ â нÑ:
function sayHi() {
// ...
}
let sayHi = function() {
// ...
};
ÐÑдповÑÐ´Ñ Ð¿ÑоÑÑа: ÑÑÑ Ð¤ÑнкÑÑоналÑний ÐиÑаз (Ñ Ð²Ð¸Ð³Ð»ÑÐ´Ñ function(â¦) {â¦}) ÑÑвоÑений вÑеÑÐµÐ´Ð¸Ð½Ñ ÑнÑÑÑÑкÑÑÑ Ð¿ÑиÑвоÑннÑ: let sayHi = â¦;. ÐÑапка з ÐºÐ¾Ð¼Ð¾Ñ ; не Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑинÑакÑиÑÑ ÑÑнкÑÑÑ. Ðона Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ ÑнÑÑÑÑкÑÑÑ, ÑÐ¾Ð¼Ñ ÑÑ ÑекомендÑÑÑÑÑÑ ÑÑавиÑи в кÑнÑÑ ÑнÑÑÑÑкÑÑÑ.
ÐÑÐ°Ð¿ÐºÑ Ð· ÐºÐ¾Ð¼Ð¾Ñ Ð´Ð¾ÑÑлÑно бÑло б поÑÑавиÑи й Ð´Ð»Ñ Ð¿ÑоÑÑÑÑÐ¾Ñ ÑнÑÑÑÑкÑÑÑ, напÑиклад Ð´Ð»Ñ let sayHi = 5;.
Ðолбеки (ÑÑнкÑÑÑ Ð·Ð²Ð¾ÑоÑного викликÑ)
РозглÑнемо ÑнÑÑ Ð¿Ñиклади пеÑедаÑÑ ÑÑнкÑÑÑ Ñк знаÑÐµÐ½Ð½Ñ Ñа викоÑиÑÑÐ°Ð½Ð½Ñ Ð¤ÑнкÑÑоналÑÐ½Ð¸Ñ ÐиÑазÑв.
ÐÐ»Ñ ÑÑого напиÑемо ÑÑнкÑÑÑ ask(question, yes, no) з ÑÑÑома паÑамеÑÑами:
question- ТекÑÑ Ð·Ð°Ð¿Ð¸ÑаннÑ
yes- ФÑнкÑÑÑ, Ñо бÑде викликаÑиÑÑ, ÑкÑо вÑдповÑÐ´Ñ âТакâ
no- ФÑнкÑÑÑ, Ñо бÑде викликаÑиÑÑ, ÑкÑо вÑдповÑÐ´Ñ âÐÑâ
ФÑнкÑÑÑ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð° поÑÑавиÑи запиÑÐ°Ð½Ð½Ñ question Ñ, залежно вÑд вÑдповÑÐ´Ñ ÐºÐ¾ÑиÑÑÑваÑа, викликаÑи yes() або no():
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}
function showOk() {
alert( "Ðи погодилиÑÑ." );
}
function showCancel() {
alert( "Ðи ÑкаÑÑвали виконаннÑ." );
}
// викоÑиÑÑаннÑ: ÑÑнкÑÑÑ showOk, showCancel пеÑедаÑÑÑÑÑ Ñк аÑгÑменÑи Ð´Ð»Ñ ask
ask("Ðи згоднÑ?", showOk, showCancel);
Ð¢Ð°ÐºÑ ÑÑнкÑÑÑ Ñ Ð´Ð¾ÑиÑÑ Ð¿ÑакÑиÑними. Ðоловна вÑдмÑннÑÑÑÑ Ð¼Ñж ÑÑнкÑÑÑÑ ask Ñ ÑеалÑниÑ
пÑогÑамаÑ
Ñа пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð²Ð¸Ñе, полÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо пеÑÑа може викоÑиÑÑовÑваÑи ÑкладнÑÑÑ ÑпоÑоби взаÑмодÑÑ Ð· коÑиÑÑÑваÑем, нÑж звиÑайний confirm. У бÑаÑзеÑаÑ
Ñака ÑÑнкÑÑÑ Ð·Ð°Ð·Ð²Ð¸Ñай показÑÑ Ð³Ð°ÑненÑке модалÑне вÑкно з запиÑаннÑм. Ðле Ñе вже ÑнÑа ÑÑÑоÑÑÑ.
ÐÑгÑменÑи showOk Ñа showCancel ÑÑнкÑÑÑ ask називаÑÑÑÑÑ ÑÑнкÑÑÑми звоÑоÑного Ð²Ð¸ÐºÐ»Ð¸ÐºÑ Ð°Ð±Ð¾ пÑоÑÑо колбеками.
СÑÑÑ Ð¿Ð¾Ð»ÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо ми пеÑедаÑмо ÑÑнкÑÑÑ Ñа оÑÑкÑÑмо, Ñо вона бÑде викликана (англ. âcalled backâ) пÑзнÑÑе, ÑкÑо Ñе бÑде поÑÑÑбно. У наÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ, showOk ÑÑÐ°Ñ ÐºÐ¾Ð»Ð±ÐµÐºÐ¾Ð¼, ÑкÑо вÑдповÑÐ´Ñ â âyesâ, а showCancel, ÑкÑо вÑдповÑÐ´Ñ â ânoâ.
Ðи можемо викоÑиÑÑаÑи ФÑнкÑÑоналÑний ÐиÑаз, Ñоб запиÑаÑи ÑÑ Ð¶ ÑÐ°Ð¼Ñ ÑÑнкÑÑÑ ÐºÐ¾ÑоÑÑе:
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}
ask(
"Ðи згоднÑ?",
function() { alert("Ðи погодилиÑÑ."); },
function() { alert("Ðи ÑкаÑÑвали виконаннÑ."); }
);
У ÑÑÐ¾Ð¼Ñ Ð¿ÑÐ¸ÐºÐ»Ð°Ð´Ñ ÑÑнкÑÑÑ Ð¾Ð³Ð¾Ð»Ð¾ÑÐµÐ½Ñ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ ask(...). Ðони не маÑÑÑ Ð²Ð»Ð°Ñного ÑмâÑ, ÑÐ¾Ð¼Ñ Ð½Ð°Ð·Ð¸Ð²Ð°ÑÑÑÑÑ Ð°Ð½Ð¾Ð½Ñмними. Ðо ÑакиÑ
ÑÑнкÑÑй не можна доÑÑÑпиÑиÑÑ Ð¿Ð¾Ð·Ð° ask (бо вони не пÑиÑвоÑÐ½Ñ Ð·Ð¼Ñнним), але Ñе Ñаме Ñе, Ñо нам поÑÑÑбно.
ÐодÑбний код, Ñо зâÑвивÑÑ Ð² наÑÐ¾Ð¼Ñ ÑкÑипÑÑ Ñ Ð¿ÑиÑодним, в дÑÑÑ JavaScript.
ÐвиÑÐ°Ð¹Ð½Ñ Ð·Ð½Ð°ÑеннÑ, Ñк-оÑ: ÑÑдки або ÑиÑла, вÑдобÑажаÑÑÑ Ð´Ð°Ð½Ñ
ФÑнкÑÑÑ, з ÑнÑого бокÑ, можна ÑпÑиймаÑи Ñк дÑÑ.
Ðи можемо пеÑедаваÑи ÑÑ Ð²Ñд змÑÐ½Ð½Ð¾Ñ Ð´Ð¾ змÑÐ½Ð½Ð¾Ñ Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñи коли заманеÑÑÑÑ.
ФÑнкÑÑоналÑний ÐиÑаз пÑоÑи ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ
СÑоÑмÑлÑймо клÑÑÐ¾Ð²Ñ Ð²ÑдмÑнноÑÑÑ Ð¼Ñж ÐголоÑеннÑм ФÑнкÑÑÑ Ñа ФÑнкÑÑоналÑним ÐиÑазом.
Ðо-пеÑÑе, ÑинÑакÑиÑ: Ñк ÑозÑÑзнÑÑи ÑÑ Ð² кодÑ.
-
ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ: ÑÑнкÑÑÑ Ð¾Ð³Ð¾Ð»Ð¾ÑÑÑÑÑÑÑ Ð¾ÐºÑÐµÐ¼Ð¾Ñ ÐºÐ¾Ð½ÑÑÑÑкÑÑÑÑ âfunctionâ¦â в оÑÐ½Ð¾Ð²Ð½Ð¾Ð¼Ñ Ð¿Ð¾ÑоÑÑ ÐºÐ¾Ð´Ñ.
// ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ function sum(a, b) { return a + b; } -
ФÑнкÑÑоналÑний ÐиÑаз: ÑÑнкÑÑÑ ÑÑвоÑÑÑÑÑÑÑ Ñк ÑаÑÑина ÑнÑого виÑÐ°Ð·Ñ Ñи ÑинÑакÑиÑÐ½Ð¾Ñ ÐºÐ¾Ð½ÑÑÑÑкÑÑÑ. ÐижÑе, ÑÑвоÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ Ð²ÑдбÑваÑÑÑÑÑ Ð² пÑавÑй ÑаÑÑÐ¸Ð½Ñ âвиÑÐ°Ð·Ñ Ð¿ÑиÑвоÑннÑâ
=:// ФÑнкÑÑоналÑний ÐиÑаз let sum = function(a, b) { return a + b; };
ТонкÑÑа вÑдмÑннÑÑÑÑ Ð² ÑомÑ, коли ÑÑнкÑÑÑ Ð±Ñде ÑÑвоÑена ÑÑÑÑÑм Javascript.
ФÑнкÑÑоналÑний ÐиÑаз бÑде ÑÑвоÑено ÑÑлÑки ÑодÑ, коли до нÑого дÑйде Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ ÑÑлÑки пÑÑÐ»Ñ ÑÑого вÑн може бÑÑи викоÑиÑÑаний.
Щойно поÑÑк Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑгне пÑÐ°Ð²Ð¾Ñ ÑаÑÑини Ñ Ð¿ÑиÑвоÑÐ½Ð½Ñ let sum = functionâ¦, ÑÑнкÑÑÑ Ð±Ñде ÑÑвоÑено Ñ Ð· ÑÑого моменÑÑ ÑÑ Ð¼Ð¾Ð¶Ð½Ð° бÑде викоÑиÑÑаÑи (пÑиÑвоÑÑи змÑннÑй, викликаÑи ÑоÑо).
У Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð· ÐголоÑеннÑм ФÑнкÑÑÑ Ð²Ñе ÑнакÑе.
СинÑакÑÐ¸Ñ ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñи ÑÑнкÑÑÑ ÑанÑÑе, нÑж вона бÑли визнаÑена в кодÑ
ÐапÑиклад, глобалÑне ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ð±Ñде доÑÑÑпним з бÑдÑ-Ñкого мÑÑÑÑ Ð² ÑкÑипÑÑ.
Така поведÑнка ÑпÑиÑинена оÑобливоÑÑÑми внÑÑÑÑÑнÑÑ Ð°Ð»Ð³Ð¾ÑиÑмÑв. Ðоли JavaScript гоÑÑÑÑÑÑÑ Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑкÑипÑÑ, вÑн ÑпоÑаÑÐºÑ ÑÑÐºÐ°Ñ Ð²ÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑÐ½Ñ ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑй Ñ Ð½Ð° ÑÑ Ð¾ÑÐ½Ð¾Ð²Ñ ÑÑвоÑÑÑ ÑÑнкÑÑÑ. Цей пÑоÑÐµÑ Ð¼Ð¾Ð¶Ð½Ð° вважаÑи âÑÐ°Ð·Ð¾Ñ ÑнÑÑÑалÑзаÑÑÑâ.
ÐÑÑÐ»Ñ Ñого, Ñк вÑÑ ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑй бÑли обÑобленÑ, ÑÑÑÑй поÑÐ¸Ð½Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñ.
Це, напÑиклад, бÑде пÑаÑÑваÑи:
sayHi("Ðван"); // ÐÑивÑÑ, Ðван
function sayHi(name) {
alert( `ÐÑивÑÑ, ${name}` );
}
ФÑнкÑÑÑ sayHi бÑло ÑÑвоÑено, коли JavaScript гоÑÑвавÑÑ Ð´Ð¾ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑкÑипÑÑ Ñ Ð²Ð¾Ð½Ð° бÑде доÑÑÑÐ¿Ð½Ð¾Ñ Ð· бÑдÑ-Ñкого мÑÑÑÑ.
â¦Ð ФÑнкÑÑоналÑним ÐиÑазом Ñе не ÑпÑаÑÑвало б:
sayHi("Ðван"); // помилка!
let sayHi = function(name) { // (*) бÑлÑÑе нÑÑÐºÐ¾Ñ Ð¼Ð°Ð³ÑÑ
alert( `ÐÑивÑÑ, ${name}` );
};
СÑвоÑÐµÐ½Ð½Ñ ÑÑнкÑÑй, визнаÑениÑ
ФÑнкÑÑоналÑними ÐиÑазами, вÑдбÑваÑÑÑÑÑ ÑодÑ, коли до ниÑ
доÑ
одиÑÑ Ð¿Ð¾ÑÑк виконаннÑ. Це ÑÑанеÑÑÑÑ ÑÑлÑки пÑи доÑÑÐ³Ð½ÐµÐ½Ð½Ñ ÑÑдка з зÑÑоÑÐºÐ¾Ñ (*). ÐанадÑо пÑзно.
Ще однÑÑÑ Ð¾ÑобливÑÑÑÑ ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ñ ÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð²Ð° облаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑÑ.
У ÑÑвоÑÐ¾Ð¼Ñ ÑежимÑ, ÑкÑо ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ð·Ð½Ð°Ñ
одиÑÑÑÑ Ð² блоÑÑ {...}, Ñо ÑÑнкÑÑÑ Ð´Ð¾ÑÑÑпна ÑÑÑди вÑеÑÐµÐ´Ð¸Ð½Ñ Ð±Ð»Ð¾ÐºÑ. Ðле не зовнÑ.
УÑвÑмо, Ñо нам поÑÑÑбно визнаÑиÑи ÑÑнкÑÑÑ welcome() залежно вÑд змÑÐ½Ð½Ð¾Ñ age, ÑÐºÑ Ð¼Ð¸ оÑÑимаÑмо пÑд ÑÐ°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñ. ÐÐ°Ð»Ñ Ð² ÑкÑипÑÑ Ð½Ð°Ð¼ бÑде поÑÑÑбно викликаÑи ÑÑ ÑÑнкÑÑÑ.
ЯкÑо ми викоÑиÑÑаÑмо ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ, Ñо Ñе не бÑде пÑаÑÑваÑи:
let age = prompt("СкÑлÑки вам ÑокÑв?", 18);
// оголоÑÑÑмо ÑÑнкÑÑÑ Ð²ÑдповÑдно до Ñмови
if (age < 18) {
function welcome() {
alert("ÐÑивÑÑ!");
}
} else {
function welcome() {
alert("ÐÑÑаннÑ!");
}
}
// ...ÑпÑобÑÑмо викликаÑи ÑÑнкÑÑÑ
welcome(); // помилка в ÑÑвоÑÐ¾Ð¼Ñ ÑÐµÐ¶Ð¸Ð¼Ñ (ReferenceError: welcome is not defined)
Це ÑомÑ, Ñо ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ð´Ð¾ÑÑÑпне ÑÑлÑки вÑеÑÐµÐ´Ð¸Ð½Ñ Ð±Ð»Ð¾ÐºÑ, Ñо його мÑÑÑиÑÑ.
ÐнÑий пÑиклад:
let age = 16; // Ð´Ð»Ñ Ð¿ÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð¿ÑиÑвоÑмо 16
if (age < 18) {
welcome(); // \ (виконÑÑÑÑÑÑ)
// |
function welcome() { // |
alert("ÐÑивÑÑ!"); // | ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ð´Ð¾ÑÑÑпне
} // | ÑÑÑди в блоÑÑ, Ñо його мÑÑÑиÑÑ
// |
welcome(); // / (виконÑÑÑÑÑÑ)
} else {
function welcome() {
alert("ÐÑÑаннÑ!");
}
}
// ТÑÑ ÑÑгÑÑÐ½Ñ Ð´Ñжки закÑиваÑÑÑÑÑ,
// ÑÐ¾Ð¼Ñ ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ Ð½Ð¸Ñ
нам не доÑÑÑпне
welcome(); // помилка в ÑÑвоÑÐ¾Ð¼Ñ ÑÐµÐ¶Ð¸Ð¼Ñ (ReferenceError: welcome is not defined)
Що можна зÑобиÑи, Ñоб ÑÑнкÑÑÑ welcome ÑÑала Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ Ð¿Ð¾Ð·Ð° if?
ÐÑавилÑнÑÑе бÑло б викоÑиÑÑаÑи ФÑнкÑÑоналÑний ÐиÑаз Ñ Ð¿ÑиÑвоÑÑи welcome змÑннÑй, Ñо оголоÑена поза блоком if Ñ Ð´Ð¾ÑÑÑпна Ð´Ð»Ñ Ð½Ð°Ñ.
Цей код пÑаÑÑÑ Ñк нам Ñ Ð¿Ð¾ÑÑÑбно:
let age = prompt("СкÑлÑки вам ÑокÑв?", 18);
let welcome;
if (age < 18) {
welcome = function() {
alert("ÐÑивÑÑ!");
};
} else {
welcome = function() {
alert("ÐÑÑаннÑ!");
};
}
welcome(); // ÑÐµÐ¿ÐµÑ Ð²Ñе гаÑазд
Ðожна ÑпÑоÑÑиÑи Ñей код, викоÑиÑÑавÑи Ñмовний опеÑаÑÐ¾Ñ ?:
let age = prompt("СкÑлÑки вам ÑокÑв?", 18);
let welcome = (age < 18) ?
function() { alert("ÐÑивÑÑ!"); } :
function() { alert("ÐÑÑаннÑ!"); };
welcome(); // ÑпÑаÑÑÑ
ÐазвиÑай, коли нам поÑÑÑбна ÑÑнкÑÑÑ, Ñо найпеÑÑе поÑÑÑбно ÑозглÑнÑÑи ÑинÑакÑÐ¸Ñ ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ. ÐÑн Ð´Ð°Ñ Ð½Ð°Ð¼ бÑлÑÑе Ñвободи Ñ ÑомÑ, Ñк оÑганÑзовÑваÑи код, оÑкÑлÑки дозволÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñи ÑÑнкÑÑÑ Ñе до ÑÑ Ð²Ð¸Ð·Ð½Ð°ÑеннÑ.
Також ÑÑнкÑÑÑ function f(â¦) {â¦} пÑоÑÑÑÑе помÑÑиÑи в кодÑ, нÑж let f = function(â¦) {â¦};. ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ð»ÐµÐ³Ñе âловлÑÑÑÑÑ Ð¾Ñимаâ.
â¦Ðле ÑкÑо з ÑкоÑÑÑ Ð¿ÑиÑини ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ Ð½Ð°Ð¼ не пÑÐ´Ñ Ð¾Ð´Ð¸ÑÑ Ð°Ð±Ð¾ нам поÑÑÑбно визнаÑиÑи ÑÑнкÑÑÑ Ð·Ð³Ñдно Ñмови (Ñк Ñе бÑло в пÑикладÑ), Ñо ÑлÑд викоÑиÑÑаÑи ФÑнкÑÑоналÑний ÐиÑаз.
ÐÑдÑÑмки
- ФÑнкÑÑÑ â Ñе знаÑеннÑ. Ðи можемо пÑиÑвоÑÑи ÑÑ Ð·Ð¼ÑннÑй, копÑÑваÑи Ñи визнаÑиÑи Ñ Ð±ÑдÑ-ÑкÑй ÑаÑÑÐ¸Ð½Ñ ÐºÐ¾Ð´Ñ.
- ЯкÑо ÑÑнкÑÑÑ Ð²Ð¸Ð·Ð½Ð°Ñена Ñк окÑема ÑнÑÑÑÑкÑÑÑ Ð² оÑÐ½Ð¾Ð²Ð½Ð¾Ð¼Ñ Ð¿Ð¾ÑоÑÑ ÐºÐ¾Ð´Ñ, Ñо Ñе називаÑÑÑ âÐголоÑеннÑм ФÑнкÑÑÑâ.
- ЯкÑо ÑÑнкÑÑÑ Ð±Ñла ÑÑвоÑена Ñк ÑаÑÑина ÑнÑого виÑазÑ, ÑÐ¾Ð´Ñ Ñе â âФÑнкÑÑоналÑний ÐиÑазâ.
- ÐбÑобка ÐголоÑÐµÐ½Ñ Ð¤ÑнкÑÑй виконÑÑÑÑÑÑ Ð¿ÐµÑед виконаннÑм Ð±Ð»Ð¾ÐºÑ ÐºÐ¾Ð´Ñ. Ð¢Ð°ÐºÑ ÑÑнкÑÑÑ Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¸Ð¼Ð¸ Ñ Ð²ÑÑÐ¾Ð¼Ñ Ð±Ð»Ð¾ÑÑ.
- ФÑнкÑÑÑ, Ñо бÑли визнаÑÐµÐ½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¤ÑнкÑÑоналÑного ÐиÑазÑ, бÑдÑÑÑ ÑÑвоÑÐµÐ½Ñ ÑÑлÑки ÑодÑ, коли до Ð½Ð¸Ñ Ð´Ñйде поÑÑк виконаннÑ.
ÐазвиÑай, коли нам поÑÑÑбно визнаÑиÑи ÑÑнкÑÑÑ, Ñо кÑаÑе вÑддаÑи пеÑÐµÐ²Ð°Ð³Ñ ÑинÑакÑиÑÑ ÐголоÑÐµÐ½Ð½Ñ Ð¤ÑнкÑÑÑ, бо Ñака ÑÑнкÑÑÑ Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñ Ð½Ð°Ð²ÑÑÑ Ð¿ÐµÑед ÑÑ Ð²Ð¸Ð·Ð½Ð°ÑеннÑм в кодÑ. Це Ð´Ð°Ñ Ð½Ð°Ð¼ бÑлÑÑÑ Ð³Ð½ÑÑкÑÑÑÑ Ð² оÑганÑзаÑÑÑ ÐºÐ¾Ð´Ñ Ñа й Ñам ÑинÑакÑÐ¸Ñ Ñ Ð±ÑлÑÑ ÑиÑабелÑним.
Таким Ñином, викоÑиÑÑовÑваÑи ФÑнкÑÑоналÑний ÐиÑаз поÑÑÑбно ÑÑлÑки ÑодÑ, коли ÐголоÑеннÑм ФÑнкÑÑÑ Ð½Ðµ пÑÐ´Ñ Ð¾Ð´Ð¸ÑÑ Ð´Ð»Ñ ÑозвâÑÐ·Ð°Ð½Ð½Ñ Ð½Ð°ÑÐ¾Ñ Ð·Ð°Ð´Ð°ÑÑ. Ðи ÑозглÑнÑли декÑлÑка ÑÐ°ÐºÐ¸Ñ Ð¿ÑикладÑв Ñ ÑÑÐ¾Ð¼Ñ ÑоздÑÐ»Ñ Ð¹ побаÑимо Ñе в майбÑÑнÑомÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)