Ð ÑÑнкÑиÑÑ
оÑновнÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ°ÑаÑÑÑÑ Ð¿ÐµÑедаÑи паÑамеÑÑов, плÑÑ Ð²Ð²ÐµÐ´ÐµÐ½Ð° дополниÑелÑÐ½Ð°Ñ ÐºÐ¾ÑоÑÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ ÑеÑез ÑÑÑелоÑÐºÑ =>.
ÐаÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ
Ðожно ÑказÑваÑÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ ÑеÑез ÑавенÑÑво =, напÑимеÑ:
function showMenu(title = "Ðез заголовка", width = 100, height = 200) {
alert(title + ' ' + width + ' ' + height);
}
showMenu("ÐенÑ"); // ÐÐµÐ½Ñ 100 200
ÐаÑамеÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð¿Ñи оÑÑÑÑÑÑвÑÑÑем аÑгÑменÑе или Ñавном undefined, напÑимеÑ:
function showMenu(title = "Ðаголовок", width = 100, height = 200) {
alert('title=' + title + ' width=' + width + ' height=' + height);
}
// Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÑдÑÑ Ð²Ð·ÑÑÑ 1 и 3 паÑамеÑÑÑ
// title=Ðаголовок width=null height=200
showMenu(undefined, null);
ÐÑи пеÑедаÑе лÑбого знаÑениÑ, кÑоме undefined, вклÑÑÐ°Ñ Ð¿ÑÑÑÑÑ ÑÑÑокÑ, Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ null, паÑамеÑÑ ÑÑиÑаеÑÑÑ Ð¿ÐµÑеданнÑм, и знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ иÑполÑзÑеÑÑÑ.
ÐаÑамеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð½Ðµ ÑолÑко знаÑениÑми, но и вÑÑажениÑми.
ÐапÑимеÑ:
function sayHi(who = getCurrentUser().toUpperCase()) {
alert('ÐÑивеÑ, ' + who);
}
function getCurrentUser() {
return 'ÐаÑÑ';
}
sayHi(); // ÐÑивеÑ, ÐÐСЯ
ÐамеÑим, ÑÑо знаÑение вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ getCurrentUser().toUpperCase() бÑÐ´ÐµÑ Ð²ÑÑиÑлено, и ÑооÑвеÑÑÑвÑÑÑие ÑÑнкÑии вÑÐ·Ð²Ð°Ð½Ñ â лиÑÑ Ð² Ñом ÑлÑÑае, еÑли ÑÑо необÑ
одимо, Ñо еÑÑÑ ÐºÐ¾Ð³Ð´Ð° ÑÑнкÑÐ¸Ñ Ð²Ñзвана без паÑамеÑÑа.
Ð ÑаÑÑноÑÑи, вÑÑажение по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ вÑÑиÑлÑеÑÑÑ Ð¿Ñи обÑÑвлении ÑÑнкÑии. РпÑимеÑе вÑÑе ÑÑнкÑÐ¸Ñ getCurrentUser() бÑÐ´ÐµÑ Ð²Ñзвана именно в поÑледней ÑÑÑоке, Ñак как не пеÑедан паÑамеÑÑ.
ÐпеÑаÑÐ¾Ñ spread вмеÑÑо arguments
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¼Ð°ÑÑив аÑгÑменÑов, можно иÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ â¦, напÑимеÑ:
function showName(firstName, lastName, ...rest) {
alert(firstName + ' ' + lastName + ' - ' + rest);
}
// вÑведеÑ: Юлий ЦезаÑÑ - ÐмпеÑаÑоÑ,Рима
showName("Юлий", "ЦезаÑÑ", "ÐмпеÑаÑоÑ", "Рима");
Ð rest попадÑÑ Ð¼Ð°ÑÑив вÑеÑ
аÑгÑменÑов, наÑÐ¸Ð½Ð°Ñ Ñ ÑÑеÑÑего.
ÐамеÑим, ÑÑо rest â наÑÑоÑÑий маÑÑив, Ñ Ð¼ÐµÑодами map, forEach и дÑÑгими, в оÑлиÑие Ð¾Ñ arguments.
ÐпеÑаÑÐ¾Ñ â¦ ÑобиÑÐ°ÐµÑ Â«Ð²Ñе оÑÑавÑиеÑÑ» аÑгÑменÑÑ, поÑÑÐ¾Ð¼Ñ Ñакое обÑÑвление не Ð¸Ð¼ÐµÐµÑ ÑмÑÑла:
function f(arg1, ...rest, arg2) { // arg2 поÑле ...rest ?!
// бÑÐ´ÐµÑ Ð¾Ñибка
}
ÐаÑамеÑÑ ...rest должен бÑÑÑ Ð² конÑе ÑÑнкÑии.
ÐÑÑе Ð¼Ñ Ñвидели иÑполÑзование ... Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов в обÑÑвлении ÑÑнкÑии. Ðо ÑÑÐ¾Ñ Ð¶Ðµ опеÑаÑÐ¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð¸ пÑи вÑзове ÑÑнкÑии, Ð´Ð»Ñ Ð¿ÐµÑедаÑи маÑÑива паÑамеÑÑов как ÑпиÑка, напÑимеÑ:
'use strict';
let numbers = [2, 3, 15];
// ÐпеÑаÑÐ¾Ñ ... в вÑзове пеÑедаÑÑ Ð¼Ð°ÑÑив как ÑпиÑок аÑгÑменÑов
// ÐÑÐ¾Ñ Ð²Ñзов аналогиÑен Math.max(2, 3, 15)
let max = Math.max(...numbers);
alert( max ); // 15
ФоÑмалÑно говоÑÑ, ÑÑи два вÑзова делаÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же:
Math.max(...numbers);
Math.max.apply(Math, numbers);
ÐÐ¾Ñ Ð¾Ð¶Ðµ, ÑÑо пеÑвÑй â коÑоÑе и кÑаÑивее.
ÐеÑÑÑÑкÑÑÑизаÑÐ¸Ñ Ð² паÑамеÑÑаÑ
ÐÑли ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð¾Ð±ÑекÑ, Ñо она Ð¼Ð¾Ð¶ÐµÑ ÐµÐ³Ð¾ ÑÑÑ Ð¶Ðµ ÑазбиÑÑ Ð² пеÑеменнÑе:
'use strict';
let options = {
title: "ÐенÑ",
width: 100,
height: 200
};
function showMenu({title, width, height}) {
alert(title + ' ' + width + ' ' + height); // ÐÐµÐ½Ñ 100 200
}
showMenu(options);
Ðожно иÑполÑзоваÑÑ Ð¸ более ÑложнÑÑ Ð´ÐµÑÑÑÑкÑÑÑизаÑиÑ, Ñ ÑооÑвеÑÑÑвиÑми и знаÑениÑми по ÑмолÑаниÑ:
'use strict';
let options = {
title: "ÐенÑ"
};
function showMenu({title="Ðаголовок", width:w=100, height:h=200}) {
alert(title + ' ' + w + ' ' + h);
}
// обÑÐµÐºÑ options бÑÐ´ÐµÑ ÑÐ°Ð·Ð±Ð¸Ñ Ð½Ð° пеÑеменнÑе
showMenu(options); // ÐÐµÐ½Ñ 100 200
ÐамеÑим, ÑÑо в пÑимеÑе вÑÑе какой-Ñо аÑгÑÐ¼ÐµÐ½Ñ Ñ showMenu() обÑзаÑелÑно должен бÑÑÑ, ÑÑÐ¾Ð±Ñ ÑазбиÑÑ ÐµÐ³Ð¾ на пеÑеменнÑе.
ÐÑли Ñ Ð¾ÑеÑÑÑ, ÑÑÐ¾Ð±Ñ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð³Ð»Ð° бÑÑÑ Ð²Ñзвана вообÑе без аÑгÑменÑов â нÑжно добавиÑÑ ÐµÐ¹ паÑамеÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ â Ñже не внÑÑÑÑ Ð´ÐµÑÑÑÑкÑÑÑизаÑии, а в Ñамом ÑпиÑке аÑгÑменÑов:
'use strict';
function showMenu({title="Ðаголовок", width:w=100, height:h=200} = {}) {
alert(title + ' ' + w + ' ' + h);
}
showMenu(); // Ðаголовок 100 200
Ркоде вÑÑе веÑÑ Ð¾Ð±ÑÐµÐºÑ Ð°ÑгÑменÑов по ÑмолÑÐ°Ð½Ð¸Ñ Ñавен пÑÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ {}, поÑÑÐ¾Ð¼Ñ Ð²Ñегда еÑÑÑ ÑÑо деÑÑÑÑкÑÑÑиÑоваÑÑ.
ÐÐ¼Ñ Â«name»
Ð ÑвойÑÑве name Ñ ÑÑнкÑии наÑ
одиÑÑÑ ÐµÑ Ð¸Ð¼Ñ.
ÐапÑимеÑ:
'use strict';
function f() {} // f.name == "f"
let g = function g() {}; // g.name == "g"
alert(f.name + ' ' + g.name) // f g
РпÑимеÑе вÑÑе Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Function Declaration и Named Function Expression. Ð ÑинÑакÑиÑе вÑÑе доволÑно оÑевидно, ÑÑо Ñ ÑÑиÑ
ÑÑнкÑий еÑÑÑ Ð¸Ð¼Ñ name. РконÑе конÑов, оно Ñказано в обÑÑвлении.
Ðо ÑовÑеменнÑй JavaScript идÑÑ Ð´Ð°Ð»ÑÑе, он ÑÑаÑаеÑÑÑ Ð´Ð°Ð¶Ðµ анонимнÑм ÑÑнкÑиÑм даÑÑ ÑазÑмнÑе имена.
ÐапÑимеÑ, пÑи Ñоздании анонимной ÑÑнкÑии Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменной запиÑÑÑ Ð² пеÑеменнÑÑ Ð¸Ð»Ð¸ ÑвойÑÑво â ÐµÑ Ð¸Ð¼Ñ Ñавно Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменной (или ÑвойÑÑва).
ÐапÑимеÑ:
'use strict';
// ÑвойÑÑво g.name = "g"
let g = function() {};
let user = {
// ÑвойÑÑво user.sayHi.name == "sayHi"
sayHi: function() {}
};
ФÑнкÑии в блоке
ÐбÑÑвление ÑÑнкÑии Function Declaration, Ñделанное в блоке, видно ÑолÑко в ÑÑом блоке.
ÐапÑимеÑ:
'use strict';
if (true) {
sayHi(); // ÑабоÑаеÑ
function sayHi() {
alert("ÐÑивеÑ!");
}
}
sayHi(); // оÑибка, ÑÑнкÑии не ÑÑÑеÑÑвÑеÑ
То еÑÑÑ, инÑми Ñловами, Ñакое обÑÑвление â ведÑÑ ÑÐµÐ±Ñ Ð² ÑоÑноÑÑи как еÑли Ð±Ñ let sayHi = function() {â¦} бÑло Ñделано в наÑале блока.
ФÑнкÑии ÑеÑез =>
ÐоÑвилÑÑ Ð½Ð¾Ð²Ñй ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÑÑнкÑий ÑеÑез «ÑÑÑелкÑ» =>.
Ðго пÑоÑÑейÑий ваÑÐ¸Ð°Ð½Ñ Ð²ÑглÑÐ´Ð¸Ñ Ñак:
'use strict';
let inc = x => x+1;
alert( inc(1) ); // 2
ÐÑи две запиÑи â пÑимеÑно аналогиÑнÑ:
let inc = x => x+1;
let inc = function(x) { return x + 1; };
Ðак видно, "x => x+1" â ÑÑо Ñже гоÑÐ¾Ð²Ð°Ñ ÑÑнкÑиÑ. Слева Ð¾Ñ => наÑ
одиÑÑÑ Ð°ÑгÑменÑ, а ÑпÑава â вÑÑажение, коÑоÑое нÑжно веÑнÑÑÑ.
ÐÑли аÑгÑменÑов неÑколÑко, Ñо нÑжно обеÑнÑÑÑ Ð¸Ñ Ð² Ñкобки, Ð²Ð¾Ñ Ñак:
'use strict';
let sum = (a,b) => a + b;
// аналог Ñ function
// let sum = function(a, b) { return a + b; };
alert( sum(1, 2) ); // 3
ÐÑли нÑжно задаÑÑ ÑÑнкÑÐ¸Ñ Ð±ÐµÐ· аÑгÑменÑов, Ñо Ñакже иÑполÑзÑÑÑÑÑ Ñкобки, в ÑÑом ÑлÑÑае â пÑÑÑÑе:
'use strict';
// вÑзов getTime() бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÑекÑÑее вÑемÑ
let getTime = () => new Date().getHours() + ':' + new Date().getMinutes();
alert( getTime() ); // ÑекÑÑее вÑемÑ
Ðогда Ñело ÑÑнкÑии доÑÑаÑоÑно болÑÑое, Ñо можно его обеÑнÑÑÑ Ð² ÑигÑÑнÑе Ñкобки {â¦}:
'use strict';
let getTime = () => {
let date = new Date();
let hours = date.getHours();
let minutes = date.getMinutes();
return hours + ':' + minutes;
};
alert( getTime() ); // ÑекÑÑее вÑемÑ
ÐамеÑим, ÑÑо как ÑолÑко Ñело ÑÑнкÑии обоÑаÑиваеÑÑÑ Ð² {â¦}, Ñо ÐµÑ ÑезÑлÑÑÐ°Ñ Ñже не возвÑаÑаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки. Ð¢Ð°ÐºÐ°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° делаÑÑ ÑвнÑй return, как в пÑимеÑе вÑÑе, еÑли конеÑно Ñ
оÑÐµÑ ÑÑо-либо возвÑаÑиÑÑ.
ФÑнкÑии-ÑÑÑелки оÑÐµÐ½Ñ ÑÐ´Ð¾Ð±Ð½Ñ Ð² каÑеÑÑве коллбеков, напÑимеÑ:
`use strict`;
let arr = [5, 8, 3];
let sorted = arr.sort( (a,b) => a - b );
alert(sorted); // 3, 5, 8
Ð¢Ð°ÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ â коÑоÑка и понÑÑна. Ðалее Ð¼Ñ Ð¿Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸Ð¼ÑÑ Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑми пÑеимÑÑеÑÑвами иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑий-ÑÑÑелок Ð´Ð»Ñ ÑÑой Ñели.
ФÑнкÑии-ÑÑÑелки не имеÑÑ Ñвоего this
ÐнÑÑÑи ÑÑнкÑий-ÑÑÑелок â ÑÐ¾Ñ Ð¶Ðµ this, ÑÑо и ÑнаÑÑжи.
ÐÑо оÑÐµÐ½Ñ Ñдобно в обÑабоÑÑÐ¸ÐºÐ°Ñ ÑобÑÑий и колбÑÐºÐ°Ñ , напÑимеÑ:
'use strict';
let group = {
title: "ÐÐ°Ñ ÐºÑÑÑ",
students: ["ÐаÑÑ", "ÐеÑÑ", "ÐаÑа"],
showList: function() {
this.students.forEach(
student => alert(this.title + ': ' + student)
)
}
}
group.showList();
// ÐÐ°Ñ ÐºÑÑÑ: ÐаÑÑ
// ÐÐ°Ñ ÐºÑÑÑ: ÐеÑÑ
// ÐÐ°Ñ ÐºÑÑÑ: ÐаÑа
ÐдеÑÑ Ð² forEach бÑла иÑполÑзована ÑÑнкÑиÑ-ÑÑÑелка, поÑÑÐ¾Ð¼Ñ this.title в колбÑке â ÑÐ¾Ñ Ð¶Ðµ, ÑÑо и во внеÑней ÑÑнкÑии showList. То еÑÑÑ, в данном ÑлÑÑае â group.title.
ÐÑли Ð±Ñ Ð² forEach вмеÑÑо ÑÑнкÑии-ÑÑÑелки бÑла обÑÑÐ½Ð°Ñ ÑÑнкÑиÑ, Ñо бÑла Ð±Ñ Ð¾Ñибка:
'use strict';
let group = {
title: "ÐÐ°Ñ ÐºÑÑÑ",
students: ["ÐаÑÑ", "ÐеÑÑ", "ÐаÑа"],
showList: function() {
this.students.forEach(function(student) {
alert(this.title + ': ' + student); // бÑÐ´ÐµÑ Ð¾Ñибка
})
}
}
group.showList();
ÐÑи запÑÑке бÑÐ´ÐµÑ Â«Ð¿Ð¾Ð¿ÑÑка пÑоÑиÑаÑÑ ÑвойÑÑво title Ñ undefined», Ñак как .forEach(f) пÑи запÑÑке f не ÑÑÐ°Ð²Ð¸Ñ this. То еÑÑÑ, this внÑÑÑи forEach бÑÐ´ÐµÑ undefined.
newÐÑÑÑÑÑÑвие Ñ ÑÑнкÑии-ÑÑÑелки «Ñвоего this» влеÑÑÑ Ð·Ð° Ñобой еÑÑеÑÑвенное огÑаниÑение: Ñакие ÑÑнкÑии нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ð² каÑеÑÑве конÑÑÑÑкÑоÑа, Ñо еÑÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð²ÑзÑваÑÑ ÑеÑез new.
.bind(this)ÐÑÑÑ Ñонкое ÑазлиÑие Ð¼ÐµÐ¶Ð´Ñ ÑÑнкÑией ÑÑÑелкой => и обÑÑной ÑÑнкÑией, Ñ ÐºÐ¾ÑоÑой вÑзван .bind(this):
- ÐÑзовом
.bind(this)Ð¼Ñ Ð¿ÐµÑедаÑм ÑекÑÑийthis, пÑивÑзÑÐ²Ð°Ñ ÐµÐ³Ð¾ к ÑÑнкÑии. - ÐÑи
=>пÑивÑзки не пÑоиÑÑ Ð¾Ð´Ð¸Ñ, Ñак как ÑÑнкÑÐ¸Ñ ÑÑÑелка вообÑе не Ð¸Ð¼ÐµÐµÑ ÐºÐ¾Ð½ÑекÑÑаthis. ÐоиÑкthisв ней оÑÑÑеÑÑвлÑеÑÑÑ Ñак же, как и поиÑк обÑÑной пеÑеменной, Ñо еÑÑÑ, вÑÑе в замÑкании. Ðо поÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑÑандаÑÑа ES-2015 Ñакое бÑло невозможно.
ФÑнкÑии-ÑÑÑелки не имеÑÑ Ñвоего arguments
РкаÑеÑÑве arguments иÑполÑзÑÑÑÑÑ Ð°ÑгÑменÑÑ Ð²Ð½ÐµÑней «обÑÑной» ÑÑнкÑии.
ÐапÑимеÑ:
'use strict';
function f() {
let showArg = () => alert(arguments[0]);
showArg();
}
f(1); // 1
ÐÑзов showArg() вÑÐ²ÐµÐ´ÐµÑ 1, полÑÑив его из аÑгÑменÑов ÑÑнкÑии f. ФÑнкÑиÑ-ÑÑÑелка здеÑÑ Ð²Ñзвана без паÑамеÑÑов, но ÑÑо не важно: arguments вÑегда беÑÑÑÑÑ Ð¸Ð· внеÑней «обÑÑной» ÑÑнкÑии.
СоÑ
Ñанение внеÑнего this и arguments Ñдобно иÑполÑзоваÑÑ Ð´Ð»Ñ ÑоÑваÑдинга вÑзовов и ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´ÐµÐºÐ¾ÑаÑоÑов.
ÐапÑимеÑ, декоÑаÑÐ¾Ñ defer(f, ms) ниже полÑÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ f и возвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÑÑÐºÑ Ð²Ð¾ÐºÑÑг неÑ, оÑкладÑваÑÑÑÑ Ð²Ñзов на ms миллиÑекÑнд:
'use strict';
function defer(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms)
}
}
function sayHi(who) {
alert('ÐÑивеÑ, ' + who);
}
let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("ÐаÑÑ"); // ÐÑивеÑ, ÐаÑÑ ÑеÑез 2 ÑекÑндÑ
ÐналогиÑÐ½Ð°Ñ ÑеализаÑÐ¸Ñ Ð±ÐµÐ· ÑÑнкÑии-ÑÑÑелки вÑглÑдела Ð±Ñ Ñак:
function defer(f, ms) {
return function() {
let args = arguments;
let ctx = this;
setTimeout(function() {
return f.apply(ctx, args);
}, ms);
}
}
Ð ÑÑом коде пÑиÑлоÑÑ ÑоздаваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе пеÑеменнÑе args и ctx Ð´Ð»Ñ Ð¿ÐµÑедаÑи внеÑниÑ
аÑгÑменÑов и конÑекÑÑа ÑеÑез замÑкание.
ÐÑого
ÐÑновнÑе ÑлÑÑÑÐµÐ½Ð¸Ñ Ð² ÑÑнкÑиÑÑ :
- Ðожно задаваÑÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ, а Ñакже иÑполÑзоваÑÑ Ð´ÐµÑÑÑÑкÑÑÑизаÑÐ¸Ñ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¿ÑÐ¸Ñ Ð¾Ð´ÑÑего обÑекÑа.
- ÐпеÑаÑÐ¾Ñ spread (ÑÑоеÑоÑие) в обÑÑвлении позволÑÐµÑ ÑÑнкÑии полÑÑаÑÑ Ð¾ÑÑавÑиеÑÑ Ð°ÑгÑменÑÑ Ð² маÑÑив:
function f(arg1, arg2, ...rest). - Ð¢Ð¾Ñ Ð¶Ðµ опеÑаÑÐ¾Ñ spread в вÑзове ÑÑнкÑии позволÑÐµÑ Ð¿ÐµÑедаÑÑ Ð² Ð½ÐµÑ Ð¼Ð°ÑÑив как ÑпиÑок аÑгÑменÑов (вмеÑÑо
apply). - У ÑÑнкÑии еÑÑÑ ÑвойÑÑво
name, оно ÑодеÑÐ¶Ð¸Ñ Ð¸Ð¼Ñ, Ñказанное пÑи обÑÑвлении ÑÑнкÑии, либо, еÑли его неÑ, Ñо Ð¸Ð¼Ñ ÑвойÑÑва или пеÑеменнÑÑ, в коÑоÑÑÑ Ð¾Ð½Ð° запиÑана. ÐÑÑÑ Ð¸ некоÑоÑÑе дÑÑгие ÑиÑÑаÑии, в коÑоÑÑÑ Ð¸Ð½ÑеÑпÑеÑаÑÐ¾Ñ Ð¿Ð¾Ð´ÑÑавлÑÐµÑ Â«Ñамое Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑее» имÑ. - ÐбÑÑвление Function Declaration в блоке
{...}видно ÑолÑко в ÑÑом блоке. - ÐоÑвилиÑÑ ÑÑнкÑии-ÑÑÑелки:
- Ðез ÑигÑÑнÑÑ
Ñкобок возвÑаÑаÑÑ Ð²ÑÑажение
expr:(args) => expr. - С ÑигÑÑнÑми Ñкобками ÑÑебÑÑÑ Ñвного
return. - Ðе имеÑÑ ÑвоиÑ
thisиarguments, пÑи обÑаÑении полÑÑаÑÑ Ð¸Ñ Ð¸Ð· окÑÑжаÑÑего конÑекÑÑа. - Ðе могÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ ÐºÐ°Ðº конÑÑÑÑкÑоÑÑ, Ñ
new.
- Ðез ÑигÑÑнÑÑ
Ñкобок возвÑаÑаÑÑ Ð²ÑÑажение
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)