Ðак Ð¼Ñ Ñже знаем, в JavaScript ÑÑнкÑÐ¸Ñ â ÑÑо знаÑение.
Ðаждое знаÑение в JavaScript Ð¸Ð¼ÐµÐµÑ Ñвой Ñип. Ð ÑÑнкÑÐ¸Ñ â ÑÑо какой Ñип?
Ð JavaScript ÑÑнкÑии â ÑÑо обÑекÑÑ.
Ðожно пÑедÑÑавиÑÑ ÑÑнкÑÐ¸Ñ ÐºÐ°Ðº «обÑекÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ»Ð°ÑÑ ÐºÐ°ÐºÐ¾Ðµ-Ñо дейÑÑвие». ФÑнкÑии можно не ÑолÑко вÑзÑваÑÑ, но и иÑполÑзоваÑÑ Ð¸Ñ ÐºÐ°Ðº обÑÑнÑе обÑекÑÑ: добавлÑÑÑ/ÑдалÑÑÑ ÑвойÑÑва, пеÑедаваÑÑ Ð¸Ñ Ð¿Ð¾ ÑÑÑлке и Ñ.д.
СвойÑÑво «name»
ÐбÑÐµÐºÑ ÑÑнкÑии ÑодеÑÐ¶Ð¸Ñ Ð½ÐµÑколÑко полезнÑÑ ÑвойÑÑв.
ÐапÑимеÑ, Ð¸Ð¼Ñ ÑÑнкÑии нам доÑÑÑпно как ÑвойÑÑво «name»:
function sayHi() {
alert("Hi");
}
alert(sayHi.name); // sayHi
ЧÑо доволÑно забавно, логика назнаÑÐµÐ½Ð¸Ñ name веÑÑма ÑмнаÑ. Ðна пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ ÐºÐ¾ÑÑекÑное Ð¸Ð¼Ñ Ð´Ð°Ð¶Ðµ в ÑлÑÑае, когда ÑÑнкÑÐ¸Ñ ÑоздаÑÑÑÑ Ð±ÐµÐ· имени и ÑÑÑ Ð¶Ðµ пÑиÑваиваеÑÑÑ, Ð²Ð¾Ñ Ñак:
let sayHi = function() {
alert("Hi");
};
alert(sayHi.name); // sayHi (еÑÑÑ Ð¸Ð¼Ñ!)
ÐÑо ÑабоÑÐ°ÐµÑ Ð´Ð°Ð¶Ðµ в ÑлÑÑае пÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ:
function f(sayHi = function() {}) {
alert(sayHi.name); // sayHi (ÑабоÑаеÑ!)
}
f();
Ð ÑпеÑиÑикаÑии ÑÑо назÑваеÑÑÑ Â«ÐºÐ¾Ð½ÑекÑÑное имÑ»: еÑли ÑÑнкÑÐ¸Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ name, Ñо JavaScript пÑÑаеÑÑÑ Ð¾Ð¿ÑеделиÑÑ ÐµÐ³Ð¾ из конÑекÑÑа.
Также имена имеÑÑ Ð¸ меÑÐ¾Ð´Ñ Ð¾Ð±ÑекÑа:
let user = {
sayHi() {
// ...
},
sayBye: function() {
// ...
}
}
alert(user.sayHi.name); // sayHi
alert(user.sayBye.name); // sayBye
Ð ÑÑом Ð½ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ магии. ÐÑваеÑ, ÑÑо коÑÑекÑное Ð¸Ð¼Ñ Ð¾Ð¿ÑеделиÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾. Ð ÑÐ°ÐºÐ¸Ñ ÑлÑÑаÑÑ ÑвойÑÑво name Ð¸Ð¼ÐµÐµÑ Ð¿ÑÑÑое знаÑение. ÐапÑимеÑ:
// ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑÑвлена внÑÑÑи маÑÑива
let arr = [function() {}];
alert( arr[0].name ); // <пÑÑÑÐ°Ñ ÑÑÑока>
// здеÑÑ Ð¾ÑÑÑÑÑÑвÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾Ð¿ÑеделиÑÑ Ð¸Ð¼Ñ, поÑÑÐ¾Ð¼Ñ ÐµÐ³Ð¾ неÑ
ÐпÑоÑем, на пÑакÑике Ñакое бÑÐ²Ð°ÐµÑ Ñедко, обÑÑно ÑÑнкÑии имеÑÑ name.
СвойÑÑво «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
Ðак Ð¼Ñ Ð²Ð¸Ð´Ð¸Ð¼, ÑÑоеÑоÑие, обознаÑаÑÑее «оÑÑаÑоÑнÑе паÑамеÑÑÑ», здеÑÑ ÐºÐ°Ðº Ð±Ñ Â«Ð½Ðµ ÑÑиÑаеÑÑÑ».
СвойÑÑво 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));
ÐÑо ÑаÑÑнÑй ÑлÑÑай Ñак назÑваемого Ad-hoc-полимоÑÑизма â обÑабоÑка аÑгÑменÑов в завиÑимоÑÑи Ð¾Ñ Ð¸Ñ
Ñипа или, как в наÑем ÑлÑÑае â Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ length. ÐÑа Ð¸Ð´ÐµÑ Ð¸Ð¼ÐµÐµÑ Ð¿Ñименение в библиоÑекаÑ
JavaScript.
ÐолÑзоваÑелÑÑкие ÑвойÑÑва
ÐÑ Ñакже можем добавиÑÑ Ñвои ÑобÑÑвеннÑе ÑвойÑÑва.
ÐавайÑе добавим ÑвойÑÑво counter Ð´Ð»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±Ñего колиÑеÑÑва вÑзовов:
function sayHi() {
alert("Hi");
// давайÑе поÑÑиÑаем, ÑколÑко вÑзовов Ð¼Ñ Ñделали
sayHi.counter++;
}
sayHi.counter = 0; // наÑалÑное знаÑение
sayHi(); // Hi
sayHi(); // Hi
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 Expression, Ñ ÐºÐ¾ÑоÑого еÑÑÑ Ð¸Ð¼Ñ.
ÐапÑимеÑ, давайÑе обÑÑвим Function Expression:
let sayHi = function(who) {
alert(`Hello, ${who}`);
};
РпÑиÑвоим ÐµÐ¼Ñ Ð¸Ð¼Ñ:
let sayHi = function func(who) {
alert(`Hello, ${who}`);
};
Чего Ð¼Ñ Ð·Ð´ÐµÑÑ Ð´Ð¾ÑÑигли? Ðакова ÑÐµÐ»Ñ ÑÑого дополниÑелÑного имени func?
ÐÐ»Ñ Ð½Ð°Ñала замеÑим, ÑÑо ÑÑнкÑÐ¸Ñ Ð²ÑÑ ÐµÑÑ Ð·Ð°Ð´Ð°Ð½Ð° как Function Expression. Ðобавление "func" поÑле function не пÑевÑаÑÐ°ÐµÑ Ð¾Ð±ÑÑвление в Function Declaration, поÑÐ¾Ð¼Ñ ÑÑо оно вÑе еÑÑ ÑвлÑеÑÑÑ ÑаÑÑÑÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑиÑваиваниÑ.
Ðобавление Ñакого имени ниÑего не ломаеÑ.
ФÑнкÑÐ¸Ñ Ð²Ñе еÑÑ Ð´Ð¾ÑÑÑпна как sayHi():
let sayHi = function func(who) {
alert(`Hello, ${who}`);
};
sayHi("John"); // Hello, John
ÐÑÑÑ Ð´Ð²Ðµ важнÑе оÑобенноÑÑи имени func, Ñади коÑоÑого оно даÑÑÑÑ:
- Ðно позволÑÐµÑ ÑÑнкÑии ÑÑÑлаÑÑÑÑ Ð½Ð° ÑÐµÐ±Ñ Ð¶Ðµ.
- Ðно не доÑÑÑпно за пÑеделами ÑÑнкÑии.
ÐапÑимеÑ, ниже ÑÑнкÑÐ¸Ñ sayHi вÑзÑÐ²Ð°ÐµÑ ÑÐµÐ±Ñ Ñ "Guest", еÑли не пеÑедан паÑамеÑÑ who:
let sayHi = function func(who) {
if (who) {
alert(`Hello, ${who}`);
} else {
func("Guest"); // иÑполÑзÑÐµÑ func, ÑÑÐ¾Ð±Ñ Ñнова вÑзваÑÑ ÑÐµÐ±Ñ Ð¶Ðµ
}
};
sayHi(); // Hello, Guest
// Ð Ð²Ð¾Ñ Ñак - не cÑабоÑаеÑ:
func(); // ÐÑибка, func не опÑеделена (недоÑÑÑпна вне ÑÑнкÑии)
ÐоÑÐµÐ¼Ñ Ð¼Ñ Ð¸ÑполÑзÑем func? ÐоÑÐµÐ¼Ñ Ð¿ÑоÑÑо не иÑполÑзоваÑÑ sayHi Ð´Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ вÑзова?
ÐообÑе, обÑÑно Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ Ñак поÑÑÑпиÑÑ:
let sayHi = function(who) {
if (who) {
alert(`Hello, ${who}`);
} else {
sayHi("Guest");
}
};
Ðднако, Ñ ÑÑого кода еÑÑÑ Ð¿Ñоблема, коÑоÑÐ°Ñ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² Ñом, ÑÑо знаÑение 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(`Hello, ${who}`);
} else {
func("Guest"); // ТепеÑÑ Ð²ÑÑ Ð² поÑÑдке
}
};
let welcome = sayHi;
sayHi = null;
welcome(); // Hello, Guest (вложеннÑй вÑзов ÑабоÑаеÑ)
ТепеÑÑ Ð²ÑÑ ÑабоÑаеÑ, поÑÐ¾Ð¼Ñ ÑÑо Ð¸Ð¼Ñ "func" локалÑное и наÑ
одиÑÑÑ Ð²Ð½ÑÑÑи ÑÑнкÑии. ТепеÑÑ Ð¾Ð½Ð¾ взÑÑо не ÑнаÑÑжи (и недоÑÑÑпно оÑÑÑда). СпеÑиÑикаÑÐ¸Ñ Ð³Ð°ÑанÑиÑÑеÑ, ÑÑо оно вÑегда бÑÐ´ÐµÑ ÑÑÑлаÑÑÑÑ Ð½Ð° ÑекÑÑÑÑ ÑÑнкÑиÑ.
ÐнеÑний код вÑе еÑÑ ÑодеÑÐ¶Ð¸Ñ Ð¿ÐµÑеменнÑе sayHi и welcome, но ÑепеÑÑ func â ÑÑо «внÑÑÑеннее Ð¸Ð¼Ñ ÑÑнкÑии», Ñаким обÑазом она Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ ÑÐµÐ±Ñ Ð¸Ð·Ð½ÑÑÑи.
ТÑÑк Ñ Â«Ð²Ð½ÑÑÑенним» именем, опиÑаннÑй вÑÑе, ÑабоÑÐ°ÐµÑ ÑолÑко Ð´Ð»Ñ Function Expression и не ÑабоÑÐ°ÐµÑ Ð´Ð»Ñ Function Declaration. ÐÐ»Ñ Function Declaration ÑинÑакÑÐ¸Ñ Ð½Ðµ пÑедÑÑмаÑÑÐ¸Ð²Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾Ð±ÑÑвиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑное «внÑÑÑеннее» имÑ.
ÐаÑаÑÑÑÑ, когда нам нÑжно надÑжное «внÑÑÑеннее» имÑ, ÑÑÐ¾Ð¸Ñ Ð¿ÐµÑепиÑаÑÑ Function Declaration на Named Function Expression.
ÐÑого
ФÑнкÑии â ÑÑо обÑекÑÑ.
ÐÑ ÑвойÑÑва:
nameâ Ð¸Ð¼Ñ ÑÑнкÑии. ÐбÑÑно беÑÑÑÑÑ Ð¸Ð· обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑÑнкÑии, но еÑли Ñам Ð½ÐµÑ â JavaScript пÑÑаеÑÑÑ Ð¿Ð¾Ð½ÑÑÑ ÐµÐ³Ð¾ из конÑекÑÑа.lengthâ колиÑеÑÑво аÑгÑменÑов в обÑÑвлении ÑÑнкÑии. ТÑоеÑоÑие («оÑÑаÑоÑнÑе паÑамеÑÑÑ») не ÑÑиÑаеÑÑÑ.
ÐÑли ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑÑвлена как Function Expression (вне оÑновного поÑока кода) и Ð¸Ð¼ÐµÐµÑ Ð¸Ð¼Ñ, Ñогда ÑÑо назÑваеÑÑÑ Named Function Expression (ÐменованнÑм ФÑнкÑионалÑнÑм ÐÑÑажением). ÐÑо Ð¸Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзовано Ð´Ð»Ñ ÑÑÑлки на ÑÐµÐ±Ñ Ð¶Ðµ, Ð´Ð»Ñ ÑекÑÑÑивнÑÑ Ð²Ñзовов и Ñ.п.
Также ÑÑнкÑии могÑÑ ÑодеÑжаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑвойÑÑва. Ðногие извеÑÑнÑе JavaScript-библиоÑеки иÑкÑÑно иÑполÑзÑÑÑ ÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ.
Ðни ÑоздаÑÑ Â«Ð¾ÑновнÑÑ» ÑÑнкÑÐ¸Ñ Ð¸ добавлÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво «вÑпомогаÑелÑнÑÑ
» ÑÑнкÑий внÑÑÑÑ Ð¿ÐµÑвой. ÐапÑимеÑ, библиоÑека jQuery ÑоздаÑÑ ÑÑнкÑÐ¸Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ $. ÐиблиоÑека lodash ÑоздаÑÑ ÑÑнкÑÐ¸Ñ _, а поÑом добавлÑÐµÑ Ð² Ð½ÐµÑ _.clone, _.keyBy и дÑÑгие ÑвойÑÑва (ÑÑÐ¾Ð±Ñ ÑзнаÑÑ Ð¾ ней поболÑÑе Ñм. докÑменÑаÑиÑ). Ðни делаÑÑ ÑÑо, ÑÑÐ¾Ð±Ñ ÑменÑÑиÑÑ Ð·Ð°ÑоÑение глобалÑного пÑоÑÑÑанÑÑва имÑн поÑÑедÑÑвом Ñого, ÑÑо одна библиоÑека пÑедоÑÑавлÑÐµÑ ÑолÑко Ð¾Ð´Ð½Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑÑ Ð¿ÐµÑеменнÑÑ, ÑменÑÑÐ°Ñ Ð²ÐµÑоÑÑноÑÑÑ ÐºÐ¾Ð½ÑликÑа имÑн.
Таким обÑазом, ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑолÑко делаÑÑ ÑÑо-Ñо Ñама по Ñебе, но Ñакже и пÑедоÑÑавлÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½ÑÑ ÑÑнкÑионалÑноÑÑÑ ÑеÑез Ñвои ÑвойÑÑва.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)