Як ми вже знаÑмо, ÑÑнкÑÑÑ Ð² JavaScript â Ñе знаÑеннÑ.
Ðожне знаÑÐµÐ½Ð½Ñ Ð² JavaScript Ð¼Ð°Ñ Ñип. Який Ñип ÑÑнкÑÑÑ?
У JavaScript, ÑÑнкÑÑÑ Ñ Ð¾Ð±âÑкÑами.
Ðи можеÑе ÑÑвиÑи ÑÐ¾Ð±Ñ ÑÑнкÑÑÑ, Ñк âобâÑкÑи, Ñо можна викликаÑи, Ñа ÑÐºÑ Ð¼Ð¾Ð¶ÑÑÑ Ð²Ð¸ÐºÐ¾Ð½ÑваÑи ÑкÑÑÑ Ð´ÑÑâ. Ðи можемо не ÑÑлÑки викликаÑи ÑÑ , але й ÑÑавиÑиÑÑ Ð´Ð¾ Ð½Ð¸Ñ Ñк до обâÑкÑÑв: додаваÑи/видалÑÑи влаÑÑивоÑÑÑ, пеÑедаваÑи за поÑиланнÑм ÑоÑо.
ÐлаÑÑивÑÑÑÑ ânameâ
ФÑнкÑÑоналÑÐ½Ñ Ð¾Ð±âÑкÑи мÑÑÑÑÑÑ Ð´ÐµÑÐºÑ Ð·ÑÑÑÐ½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ.
ÐапÑиклад, назва ÑÑнкÑÑÑ Ð´Ð¾ÑÑÑпна Ñк влаÑÑивÑÑÑÑ ânameâ:
function sayHi() {
alert("ÐÑивÑÑ");
}
alert(sayHi.name); // sayHi
Що Ð´Ð¾Ð²Ð¾Ð»Ñ ÑмÑÑно, логÑка пÑиÑвоÑÐ½Ð½Ñ ânameâ доÑиÑÑ ÑозÑмна. Ðона пÑаÑÑÑ Ñак, Ñо пÑизнаÑÐ°Ñ Ð¿ÑавилÑне ÑмâÑ ÑÑнкÑÑÑ, навÑÑÑ ÑкÑо ÑÑнкÑÑÑ Ð±Ñла ÑÑвоÑена без ÑменÑ, а поÑÑм бÑла негайно пÑизнаÑена:
let sayHi = function() {
alert("ÐÑивÑÑ");
};
alert(sayHi.name); // sayHi (Ñ ÑмâÑ!)
Це Ñакож пÑаÑÑÑ, ÑкÑо пÑизнаÑÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð·Ð° замовÑÑваннÑм:
function f(sayHi = function() {}) {
alert(sayHi.name); // sayHi (пÑаÑÑÑ!)
}
f();
У ÑпеÑиÑÑкаÑÑÑ ÑÑ Ð¾Ð·Ð½Ð°ÐºÐ° називаÑÑÑÑÑ âконÑекÑÑне ÑмâÑâ. ЯкÑо ÑÑнкÑÑÑ Ð½Ðµ Ð½Ð°Ð´Ð°Ñ Ð²Ð»Ð°Ñне ÑмâÑ, Ñо в пÑиÑвоÑÐ½Ð½Ñ Ð²Ð¾Ð½Ð¾ зâÑвлÑÑÑÑÑÑ Ð· конÑекÑÑÑ.
ÐеÑоди обâÑкÑÑв Ñакож маÑÑÑ Ð½Ð°Ð·Ð²Ð¸:
let user = {
sayHi() {
// ...
},
sayBye: function() {
// ...
}
}
alert(user.sayHi.name); // sayHi
alert(user.sayBye.name); // sayBye
ÐÑоÑе ÑÑÑ Ð½ÐµÐ¼Ð°Ñ Ð½ÑÑÐºÐ¾Ñ Ð¼Ð°Ð³ÑÑ. Рвипадки, коли Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑпоÑÐ¾Ð±Ñ Ð·âÑÑÑваÑи пÑавилÑÐ½Ñ Ð½Ð°Ð·Ð²Ñ. У ÑÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ ÑмâÑ Ð½Ð°Ð·Ð²Ð¸ поÑожнÑ, Ñк ÑÑÑ:
// ÑÑнкÑÑÑ ÑÑвоÑена вÑеÑÐµÐ´Ð¸Ð½Ñ Ð¼Ð°ÑивÑ
let arr = [function() {}];
alert( arr[0].name ); // <поÑожнÑй ÑÑдок>
// ÑÑÑÑй JavaScript не Ð¼Ð°Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑÑ Ð½Ð°Ð»Ð°ÑÑÑваÑи пÑавилÑÐ½Ñ Ð½Ð°Ð·Ð²Ñ, ÑÐ¾Ð¼Ñ Ð² ÑÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¾Ð³Ð¾ знаÑеннÑ
Ðа пÑакÑиÑÑ, однак, бÑлÑÑÑÑÑÑ ÑÑнкÑÑй маÑÑÑ Ð½Ð°Ð·Ð²Ñ.
ÐлаÑÑивÑÑÑÑ âlengthâ
ÐÑнÑÑ Ñе одна вбÑдована влаÑÑивÑÑÑÑ âlengthâ, Ñка повеÑÑÐ°Ñ ÐºÑлÑкÑÑÑÑ Ð¿Ð°ÑамеÑÑÑв ÑÑнкÑÑÑ, напÑиклад:
function f1(a) {}
function f2(a, b) {}
function many(a, b, ...more) {}
alert(f1.length); // 1
alert(f2.length); // 2
alert(many.length); // 2
РоÑÑаннÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð¼Ð¸ баÑимо, Ñо паÑамеÑÑи, ÑÐºÑ Ð±Ñло зÑбÑано rest опеÑаÑоÑом, не пÑдÑÐ°Ñ Ð¾Ð²ÑÑÑÑÑÑ.
ÐлаÑÑивÑÑÑÑ length ÑÐ½Ð¾Ð´Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ ÑнÑÑоÑпекÑÑÑ Ñ ÑÑнкÑÑÑÑ
, ÑÐºÑ Ð¿ÑаÑÑÑÑÑ Ð· ÑнÑими ÑÑнкÑÑÑми.
ÐапÑиклад, Ñ ÐºÐ¾Ð´Ñ Ð½Ð¸Ð¶Ñе ÑÑнкÑÑÑ ask пÑÐ¸Ð¹Ð¼Ð°Ñ Ñк аÑгÑÐ¼ÐµÐ½Ñ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ð½Ñ question Ñа довÑлÑÐ½Ñ ÐºÑлÑкÑÑÑÑ ÑÑнкÑÑй-обÑоблÑваÑÑв вÑдповÑÐ´Ñ handler.
ÐÑÑÐ»Ñ Ñого, Ñк коÑиÑÑÑÐ²Ð°Ñ Ð½Ð°Ð´Ð°Ñ Ð²ÑдповÑдÑ, ÑÑнкÑÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ Ð¾Ð±ÑоблÑваÑÑ. Ðи можемо пеÑедаÑи два Ñипи обÑобникÑв:
- ÑÑнкÑÑÑ Ð±ÐµÐ· аÑгÑменÑÑв, Ñка лиÑе викликаÑÑÑÑÑ, коли коÑиÑÑÑÐ²Ð°Ñ Ð´Ð°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ð²Ð½Ñ Ð²ÑдповÑдÑ.
- ÑÑнкÑÑÑ Ð· аÑгÑменÑами, Ñка називаÑÑÑÑÑ Ð² бÑдÑ-ÑÐºÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ, Ñ Ð¿Ð¾Ð²ÐµÑÑÐ°Ñ Ð²ÑдповÑдÑ.
Щоб викликаÑи handler пÑавилÑно, ми ÑозглÑдаÑмо влаÑÑивÑÑÑÑ handler.length.
ÐÐ´ÐµÑ Ð¿Ð¾Ð»ÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо Ñ Ð½Ð°Ñ Ñ Ð¿ÑоÑÑий, ÑинÑакÑÐ¸Ñ Ð¾Ð±Ñобника без аÑгÑменÑÑв Ð´Ð»Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ð²Ð½Ð¸Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв (найÑаÑÑÑÑий ваÑÑанÑ), але Ñакож пÑдÑÑимÑÑÑÑÑÑ ÑнÑвеÑÑалÑÐ½Ñ Ð¾Ð±Ñобники:
function ask(question, ...handlers) {
let isYes = confirm(question);
for(let handler of handlers) {
if (handler.length == 0) {
if (isYes) handler();
} else {
handler(isYes);
}
}
}
// ÐÐ»Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ð²Ð½Ð¾Ñ Ð²ÑдповÑдÑ, обидва обÑобники викликаÑÑÑÑÑ
// Ð´Ð»Ñ Ð½ÐµÐ³Ð°ÑÐ¸Ð²Ð½Ð¾Ñ Ð²ÑдповÑдÑ, ÑÑлÑки дÑÑгий
ask("ÐапиÑаннÑ?", () => alert('Ти Ñказав Ñак'), result => alert(result));
Це конкÑеÑний випадок Ñак званого полÑмоÑÑÑÐ·Ð¼Ñ â обÑобка аÑгÑменÑÑв по-ÑÑÐ·Ð½Ð¾Ð¼Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾ вÑд ÑÑ
ÑÐ¸Ð¿Ñ Ð°Ð±Ð¾, Ñ Ð½Ð°ÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð·Ð°Ð»ÐµÐ¶Ð½Ð¾ вÑд length. Ð¦Ñ ÑÐ´ÐµÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑÑÑ Ð² бÑблÑоÑекаÑ
JavaScript.
ÐаÑÑÐ¾Ð¼Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ
Ðи Ñакож можемо додаÑи влаÑÐ½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ.
ТÑÑ Ð¼Ð¸ додаÑмо влаÑÑивÑÑÑÑ counter Ð´Ð»Ñ Ð²ÑдÑÑÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑÐ½Ð¾Ñ ÐºÑлÑкоÑÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÑв:
function sayHi() {
alert("ÐÑивÑÑ");
// давайÑе поÑаÑ
ÑваÑи, ÑкÑлÑки викликÑв ÑÑнкÑÑÑ Ð¼Ð¸ зÑобили
sayHi.counter++;
}
sayHi.counter = 0; // поÑаÑкове знаÑеннÑ
sayHi(); // ÐÑивÑÑ
sayHi(); // ÐÑивÑÑ
alert( `Ðикликана ${sayHi.counter} Ñази` ); // Ðикликана 2 Ñази
ÐлаÑÑивÑÑÑÑ, пÑиÑвоÑна ÑÑнкÑÑÑ, Ñк sayhi.counter = 0 не визнаÑÐ°Ñ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ñ Ð·Ð¼ÑÐ½Ð½Ñ counter вÑеÑÐµÐ´Ð¸Ð½Ñ ÑÑÑÑ ÑÑнкÑÑÑ. ÐнÑими Ñловами, влаÑÑивÑÑÑÑ counter Ñа змÑнна let counter Ñ Ð´Ð²Ð¾Ð¼Ð° незвâÑзаними ÑеÑами.
Ðи можемо викоÑиÑÑовÑваÑи ÑÑнкÑÑÑ Ñк обâÑкÑ, збеÑÑгаÑи влаÑÑивоÑÑÑ Ñ Ð½ÑомÑ, але Ñе не впливаÑиме на ÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ. ÐмÑÐ½Ð½Ñ â Ñе не влаÑÑивоÑÑÑ ÑÑнкÑÑÑ Ñ Ð½Ð°Ð²Ð¿Ð°ÐºÐ¸. Це два паÑалелÑÐ½Ñ ÑвÑÑи.
ÐлаÑÑивоÑÑÑ ÑÑнкÑÑй можÑÑÑ ÑÐ½Ð¾Ð´Ñ Ð·Ð°Ð¼ÑниÑи замиканнÑ. ÐапÑиклад, ми можемо пеÑепиÑаÑи пÑиклад ÑÑнкÑÑÑ Ð»ÑÑилÑника з ÑоздÑÐ»Ñ ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð·Ð¼ÑнноÑ, Ð·Ð°Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑи влаÑÑивÑÑÑÑ ÑÑнкÑÑÑ:
function makeCounter() {
// замÑÑÑÑ:
// let count = 0
function counter() {
return counter.count++;
};
counter.count = 0;
return counter;
}
let counter = makeCounter();
alert( counter() ); // 0
alert( counter() ); // 1
ÐаÑаз count збеÑÑгаÑÑÑÑÑ Ð² ÑÑнкÑÑÑ Ð±ÐµÐ·Ð¿Ð¾ÑеÑеднÑо, а не Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÐ¾Ð¼Ñ Ð»ÐµÐºÑиÑÐ½Ð¾Ð¼Ñ ÑеÑедовиÑÑ.
Це кÑаÑе або гÑÑÑе, нÑж викоÑиÑÑÐ°Ð½Ð½Ñ Ð·Ð°Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ?
ÐÑновна вÑдмÑннÑÑÑÑ Ð¿Ð¾Ð»ÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо ÑкÑо знаÑÐµÐ½Ð½Ñ count живе в зовнÑÑнÑй змÑннÑй, Ñо зовнÑÑнÑй код не може оÑÑимаÑи доÑÑÑп до нÑого.ТÑлÑки Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ñ ÑÑнкÑÑÑ Ð¼Ð¾Ð¶ÑÑÑ Ð·Ð¼ÑнÑваÑи його. Ð ÑкÑо Ñе знаÑÐµÐ½Ð½Ñ Ð¿ÑиÑвоÑно Ñк влаÑÑивÑÑÑÑ ÑÑнкÑÑÑ, Ñо ми можемо оÑÑимаÑи до нÑого доÑÑÑп:
function makeCounter() {
function counter() {
return counter.count++;
};
counter.count = 0;
return counter;
}
let counter = makeCounter();
counter.count = 10;
alert( counter() ); // 10
Таким Ñином, вибÑÑ ÑеалÑзаÑÑÑ Ð·Ð°Ð»ÐµÐ¶Ð¸ÑÑ Ð²Ñд наÑÐ¸Ñ ÑÑлей.
Named Function Expression
Named Function Expression, або NFE â Ñе ÑеÑмÑн Ð´Ð»Ñ Function Expressions, Ñ Ñкого Ñ Ð½Ð°Ð·Ð²Ð°.
ÐапÑиклад, обâÑвÑмо звиÑайний Function Expression:
let sayHi = function(who) {
alert(`ÐÑивÑÑ, ${who}`);
};
РдодайÑе до нÑого назвÑ:
let sayHi = function func(who) {
alert(`ÐÑивÑÑ, ${who}`);
};
Чого ми доÑÑгли ÑÑÑ? Яка меÑа додаÑÐºÐ¾Ð²Ð¾Ñ Ð½Ð°Ð·Ð²Ð¸ "func"?
СпоÑаÑÐºÑ Ð²ÑдзнаÑимо, Ñо Ñ Ð½Ð°Ñ Ñе Ñ Function Expression. ÐÐ¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ "func" пÑÑÐ»Ñ function не ÑобиÑÑ Ð¾Ð³Ð¾Ð»Ð¾ÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ Ñ Ð²Ð¸Ð³Ð»ÑÐ´Ñ Functional Declaration, оÑкÑлÑки ÑÑнкÑÑÑ Ð²Ñе Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ Ð²Ð¸ÑÐ°Ð·Ñ Ð¿ÑиÑвоÑннÑ.
ÐÐ¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÑÐ°ÐºÐ¾Ñ Ð½Ð°Ð·Ð²Ð¸ нÑÑого не поÑÑÑÑÑ.
ФÑнкÑÑÑ Ð²Ñе Ñе доÑÑÑпна Ñк sayHi():
let sayHi = function func(who) {
alert(`ÐÑивÑÑ, ${who}`);
};
sayHi("Ðван"); // ÐÑивÑÑ, Ðван
Ð Ð´Ð²Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ñ Ð¾ÑобливоÑÑÑ Ð½Ð°Ð·Ð²Ð¸ func, ÑеÑез ÑÐºÑ Ð²Ð¾Ð½Ð¾ даÑÑÑÑÑ:
- Ðона дозволÑÑ ÑÑнкÑÑÑ Ð¿Ð¾ÑилаÑиÑÑ Ð½Ð° Ñебе.
- Ðона не доÑÑÑпна за межами ÑÑнкÑÑÑ.
ÐапÑиклад, ÑÑнкÑÑÑ sayHi нижÑе Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ Ñебе Ð·Ð½Ð¾Ð²Ñ "ÐÑÑÑÑ" ÑкÑо who не надаÑÑÑÑÑ:
let sayHi = function func(who) {
if (who) {
alert(`ÐÑивÑÑ, ${who}`);
} else {
func("ÐÑÑÑÑ"); // викоÑиÑÑовÑÑ func Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного викликÑ
}
};
sayHi(); // ÐÑивÑÑ, ÐÑÑÑÑ
// Ðле Ñе не бÑде пÑаÑÑваÑи:
func(); // Ðомилка, func не оголоÑена (недоÑÑÑпна за межами ÑÑнкÑÑÑ)
Ð§Ð¾Ð¼Ñ Ð¼Ð¸ викоÑиÑÑовÑÑмо func? Ðожливо, пÑоÑÑо викоÑиÑÑовÑваÑи sayHi Ð´Ð»Ñ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð¾Ð³Ð¾ викликÑ?
ÐаÑпÑÐ°Ð²Ð´Ñ Ð² бÑлÑÑоÑÑÑ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв ми можемо Ñе зÑобиÑи:
let sayHi = function(who) {
if (who) {
alert(`ÐÑивÑÑ, ${who}`);
} else {
sayHi("ÐÑÑÑÑ");
}
};
ÐÑоблема з Ñим кодом полÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо sayHi може змÑнÑваÑиÑÑ Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÐ¾Ð¼Ñ ÐºÐ¾Ð´Ñ. ЯкÑо ÑÑнкÑÑÑ Ð±Ñде пÑиÑвоÑна ÑнÑÑй змÑннÑй, код поÑне даваÑи помилки:
let sayHi = function(who) {
if (who) {
alert(`Hello, ${who}`);
} else {
sayHi("Guest"); // Ðомилка: sayHi не Ñ ÑÑнкÑÑÑÑ
}
};
let welcome = sayHi;
sayHi = null;
welcome(); // Ðомилка, вкладений виклик sayHi бÑлÑÑе не пÑаÑÑÑ!
Це вÑдбÑваÑÑÑÑÑ ÑомÑ, Ñо ÑÑнкÑÑÑ Ð¿ÑÐ¸Ð¹Ð¼Ð°Ñ sayHi з його зовнÑÑнÑого лекÑиÑного ÑеÑедовиÑа. Там Ð½ÐµÐ¼Ð°Ñ Ð¼ÑÑÑевого sayHi, ÑÐ¾Ð¼Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑÑÑ Ð·Ð¾Ð²Ð½ÑÑÐ½Ñ Ð·Ð¼Ñнна. Рв Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ Ð·Ð¾Ð²Ð½ÑÑнÑй sayHi Ñ null.
ÐеобовâÑзкове ÑмâÑ, Ñке ми можемо ввеÑÑи в Function Expression, пÑизнаÑене Ð´Ð»Ñ ÑозвâÑÐ·Ð°Ð½Ð½Ñ ÑÐ¸Ñ Ð¿Ñоблем.
ÐикоÑиÑÑовÑймо Ñе, Ñоб випÑавиÑи Ð½Ð°Ñ ÐºÐ¾Ð´:
let sayHi = function func(who) {
if (who) {
alert(`ÐÑивÑÑ, ${who}`);
} else {
func("ÐÑÑÑÑ"); // Ð¢ÐµÐ¿ÐµÑ Ð²Ñе добÑе
}
};
let welcome = sayHi;
sayHi = null;
welcome(); // ÐÑивÑÑ, ÐÑÑÑÑ (вкладений виклик виконÑÑÑÑÑÑ)
Ð¢ÐµÐ¿ÐµÑ Ñе пÑаÑÑÑ, ÑÐ¾Ð¼Ñ Ñо назва "func" â локалÑне Ñ Ð·Ð½Ð°Ñ
одиÑÑÑÑ Ð² ÑеÑÐµÐ´Ð¸Ð½Ñ ÑÑнкÑÑÑ. Ðоно не беÑеÑÑÑÑ Ð·Ð·Ð¾Ð²Ð½Ñ (Ñ Ð½Ðµ доÑÑÑпно звÑдÑи). СпеÑиÑÑкаÑÑÑ Ð³Ð°ÑанÑÑÑ, Ñо воно завжди поÑилаÑÑÑÑÑ Ð½Ð° поÑоÑÐ½Ñ ÑÑнкÑÑÑ.
ÐовнÑÑнÑй код вÑе Ñе Ð¼Ð°Ñ ÑÐ²Ð¾Ñ Ð·Ð¼ÑÐ½Ð½Ñ sayHi або welcome. Ð func â Ñе âвнÑÑÑÑÑÐ½Ñ ÑмâÑ ÑÑнкÑÑÑâ, Ñким ÑÑнкÑÑÑ Ð¼Ð¾Ð¶Ðµ надÑйно викликаÑи Ñебе зÑеÑедини.
ФÑнкÑÑоналÑнÑÑÑÑ Ð· âвнÑÑÑÑÑнÑÐ¾Ñ Ð½Ð°Ð·Ð²Ð¾Ñâ, Ñо опиÑана виÑе, доÑÑÑпна лиÑе Ð´Ð»Ñ Function Expression, а не Ð´Ð»Ñ Function Declaration. ÐÐ»Ñ Function Declaration Ð½ÐµÐ¼Ð°Ñ ÑинÑакÑиÑÑ Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ âвнÑÑÑÑÑнÑоÑâ назви.
ÐнодÑ, коли нам поÑÑÑбна надÑйна внÑÑÑÑÑÐ½Ñ Ð½Ð°Ð·Ð²Ð°, Ñе пÑиÑина пеÑезапиÑаÑи Function Declaration на Named Function Expression.
ÐÑдÑÑмки
ФÑнкÑÑÑ Ñ Ð¾Ð±âÑкÑами.
ÐÑ Ð²Ð»Ð°ÑÑивоÑÑÑ:
nameâ назва ÑÑнкÑÑÑ. ÐазвиÑай беÑеÑÑÑÑ Ð· оголоÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ, але ÑкÑо немаÑ, JavaScript намагаÑÑÑÑÑ Ð·Ð´Ð¾Ð³Ð°Ð´Ð°ÑиÑÑ Ð· конÑекÑÑÑ (напÑиклад, з пÑиÑвоÑннÑ).lengthâ кÑлÑкÑÑÑÑ Ð°ÑгÑменÑÑв в оголоÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ. ÐаÑамеÑÑи, Ñо зÑбÑÐ°Ð½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ rest опеÑаÑоÑа, не пÑдÑÐ°Ñ Ð¾Ð²ÑÑÑÑÑÑ.
ЯкÑо ÑÑнкÑÑÑ Ð¾Ð³Ð¾Ð»Ð¾ÑÑÑÑÑÑÑ Ñк Function Expression (не в оÑÐ½Ð¾Ð²Ð½Ð¾Ð¼Ñ Ð¿Ð¾ÑоÑÑ ÐºÐ¾Ð´Ñ), Ñ Ð¼Ð°Ñ Ð²Ð»Ð°ÑÐ½Ñ Ð½Ð°Ð·Ð²Ñ, Ñо Ñе називаÑÑÑÑÑ Named Function Expression. Ðазва може бÑÑи викоÑиÑÑана вÑеÑÐµÐ´Ð¸Ð½Ñ ÑÑнкÑÑÑ, Ñоб поÑилаÑиÑÑ Ð½Ð° ÑÐ°Ð¼Ñ Ñебе, Ð´Ð»Ñ ÑекÑÑÑÑÐ¹Ð½Ð¸Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑв Ñа Ñнâ¦
Також ÑÑнкÑÑÑ Ð¼Ð¾Ð¶ÑÑÑ Ð½ÐµÑÑи додаÑÐºÐ¾Ð²Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ. ÐагаÑо вÑÐ´Ð¾Ð¼Ð¸Ñ Ð±ÑблÑоÑек JavaScript акÑивно викоÑиÑÑовÑÑÑÑ ÑÑ Ð²Ð»Ð°ÑÑивÑÑÑÑ ÑÑнкÑÑÑ.
Ðони ÑÑвоÑÑÑÑÑ âголовнÑâ ÑÑнкÑÑÑ Ñ Ð´Ð¾Ð´Ð°ÑÑÑ Ð±Ð°Ð³Ð°Ñо ÑнÑиÑ
âдопомÑжниÑ
â ÑÑнкÑÑй до неÑ. ÐапÑиклад, бÑблÑоÑека jQuery ÑÑвоÑÑÑ ÑÑнкÑÑÑ, Ñо називаÑÑÑÑÑ $. ÐÑблÑоÑека lodash ÑÑвоÑÑÑ ÑÑнкÑÑÑ _, а поÑÑм Ð´Ð¾Ð´Ð°Ñ _.clone, _.keyBy Ñа ÑнÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð´Ð¾ Ð½ÐµÑ (див. докÑменÑаÑÑÑ, Ñо дÑзнаÑиÑÑ Ð±ÑлÑÑе). ÐлаÑне, вони ÑоблÑÑÑ Ñе, Ñоб зменÑиÑи ÑÐ²Ð¾Ñ Ð·Ð°Ð±ÑÑÐ´Ð½ÐµÐ½Ð½Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного пÑоÑÑоÑÑ Ñмен, Ñак Ñо одна бÑблÑоÑека Ð´Ð°Ñ Ð»Ð¸Ñе Ð¾Ð´Ð½Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑÐ½Ñ Ð·Ð¼ÑннÑ. Це зменÑÑÑ Ð¼Ð¾Ð¶Ð»Ð¸Ð²ÑÑÑÑ ÐºÐ¾Ð½ÑлÑкÑÑв Ñмен.
ÐÑже, ÑÑнкÑÑÑ Ð¼Ð¾Ð¶Ðµ ÑобиÑи коÑиÑÐ½Ñ ÑобоÑÑ Ñама по ÑобÑ, а Ñакож неÑÑи кÑÐ¿Ñ ÑнÑÐ¸Ñ ÑÑнкÑÑй Ñ Ð²Ð»Ð°ÑÑивоÑÑÑÑ .
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)