ÐаÑаÑÑÑÑ Ð½Ð°Ð¼ надо повÑоÑÑÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же дейÑÑвие во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑаÑÑÑÑ Ð¿ÑогÑаммÑ.
ÐапÑимеÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ кÑаÑиво вÑвеÑÑи ÑообÑение пÑи пÑивеÑÑÑвии поÑеÑиÑелÑ, пÑи вÑÑ Ð¾Ð´Ðµ поÑеÑиÑÐµÐ»Ñ Ñ ÑайÑа, еÑÑ Ð³Ð´Ðµ-нибÑдÑ.
ЧÑÐ¾Ð±Ñ Ð½Ðµ повÑоÑÑÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ код во Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð¼ÐµÑÑÐ°Ñ , пÑидÑÐ¼Ð°Ð½Ñ ÑÑнкÑии. ФÑнкÑии ÑвлÑÑÑÑÑ Ð¾ÑновнÑми «ÑÑÑоиÑелÑнÑми блоками» пÑогÑаммÑ.
ÐÑимеÑÑ Ð²ÑÑÑоеннÑÑ
ÑÑнкÑий Ð²Ñ Ñже видели â ÑÑо alert(message), prompt(message, default) и confirm(question). Ðо можно ÑоздаваÑÑ Ð¸ Ñвои.
ÐбÑÑвление ÑÑнкÑии
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑнкÑий Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð¾Ð±ÑÑвление ÑÑнкÑии.
ÐÑÐ¸Ð¼ÐµÑ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑÑнкÑии:
function showMessage() {
alert( 'ÐÑем пÑивеÑ!' );
}
ÐнаÑале идÑÑ ÐºÐ»ÑÑевое Ñлово function, поÑле него Ð¸Ð¼Ñ ÑÑнкÑии, заÑем ÑпиÑок паÑамеÑÑов в кÑÑглÑÑ
ÑкобкаÑ
ÑеÑез запÑÑÑÑ (в вÑÑепÑиведÑнном пÑимеÑе он пÑÑÑой) и, наконеÑ, код ÑÑнкÑии, Ñакже назÑваемÑй «Ñелом ÑÑнкÑии», внÑÑÑи ÑигÑÑнÑÑ
Ñкобок.
function имÑ(паÑамеÑÑÑ) {
...Ñело...
}
ÐаÑа Ð½Ð¾Ð²Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзвана по ÑÐ²Ð¾ÐµÐ¼Ñ Ð¸Ð¼ÐµÐ½Ð¸: showMessage().
ÐапÑимеÑ:
function showMessage() {
alert( 'ÐÑем пÑивеÑ!' );
}
showMessage();
showMessage();
ÐÑзов showMessage() вÑполнÑÐµÑ ÐºÐ¾Ð´ ÑÑнкÑии. ÐдеÑÑ Ð¼Ñ Ñвидим ÑообÑение дваждÑ.
ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ñвно демонÑÑÑиÑÑÐµÑ Ð¾Ð´Ð½Ð¾ из главнÑÑ Ð¿ÑедназнаÑений ÑÑнкÑий: избавление Ð¾Ñ Ð´ÑблиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð°.
ÐÑли понадобиÑÑÑ Ð¿Ð¾Ð¼ÐµÐ½ÑÑÑ ÑообÑение или ÑпоÑоб его вÑвода â доÑÑаÑоÑно измениÑÑ ÐµÐ³Ð¾ в одном меÑÑе: в ÑÑнкÑии, коÑоÑÐ°Ñ ÐµÐ³Ð¾ вÑводиÑ.
ÐокалÑнÑе пеÑеменнÑе
ÐеÑеменнÑе, обÑÑвленнÑе внÑÑÑи ÑÑнкÑии, Ð²Ð¸Ð´Ð½Ñ ÑолÑко внÑÑÑи ÑÑой ÑÑнкÑии.
ÐапÑимеÑ:
function showMessage() {
let message = "ÐÑивеÑ, Ñ JavaScript!"; // локалÑÐ½Ð°Ñ Ð¿ÐµÑеменнаÑ
alert( message );
}
showMessage(); // ÐÑивеÑ, Ñ JavaScript!
alert( message ); // <-- бÑÐ´ÐµÑ Ð¾Ñибка, Ñ.к. пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð²Ð¸Ð´Ð½Ð° ÑолÑко внÑÑÑи ÑÑнкÑии
ÐнеÑние пеÑеменнÑе
У ÑÑнкÑии еÑÑÑ Ð´Ð¾ÑÑÑп к внеÑним пеÑеменнÑм, напÑимеÑ:
let userName = 'ÐаÑÑ';
function showMessage() {
let message = 'ÐÑивеÑ, ' + userName;
alert(message);
}
showMessage(); // ÐÑивеÑ, ÐаÑÑ
ФÑнкÑÐ¸Ñ Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð¿Ð¾Ð»Ð½Ñм доÑÑÑпом к внеÑним пеÑеменнÑм и Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð¸Ñ Ð·Ð½Ð°Ñение.
ÐапÑимеÑ:
let userName = 'ÐаÑÑ';
function showMessage() {
userName = "ÐеÑÑ"; // (1) изменÑем знаÑение внеÑней пеÑеменной
let message = 'ÐÑивеÑ, ' + userName;
alert(message);
}
alert( userName ); // ÐаÑÑ Ð¿ÐµÑед вÑзовом ÑÑнкÑии
showMessage();
alert( userName ); // ÐеÑÑ, знаÑение внеÑней пеÑеменной бÑло изменено ÑÑнкÑией
ÐнеÑнÑÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸ÑполÑзÑеÑÑÑ, ÑолÑко еÑли внÑÑÑи ÑÑнкÑии Ð½ÐµÑ Ñакой локалÑной.
ÐÑли одноимÑÐ½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾Ð±ÑÑвлÑеÑÑÑ Ð²Ð½ÑÑÑи ÑÑнкÑии, Ñогда она пеÑекÑÑÐ²Ð°ÐµÑ Ð²Ð½ÐµÑнÑÑ. ÐапÑимеÑ, в коде ниже ÑÑнкÑÐ¸Ñ Ð¸ÑполÑзÑÐµÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ Ð¿ÐµÑеменнÑÑ userName. ÐнеÑнÑÑ Ð±ÑÐ´ÐµÑ Ð¿ÑоигноÑиÑована:
let userName = 'ÐаÑÑ';
function showMessage() {
let userName = "ÐеÑÑ"; // обÑÑвлÑем локалÑнÑÑ Ð¿ÐµÑеменнÑÑ
let message = 'ÐÑивеÑ, ' + userName; // ÐеÑÑ
alert(message);
}
// ÑÑнкÑÐ¸Ñ ÑоздаÑÑ Ð¸ бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÐ²Ð¾Ñ ÑобÑÑвеннÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ Ð¿ÐµÑеменнÑÑ userName
showMessage();
alert( userName ); // ÐаÑÑ, не изменилаÑÑ, ÑÑнкÑÐ¸Ñ Ð½Ðµ ÑÑогала внеÑнÑÑ Ð¿ÐµÑеменнÑÑ
ÐеÑеменнÑе, обÑÑвленнÑе ÑнаÑÑжи вÑеÑ
ÑÑнкÑий, Ñакие как внеÑнÑÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ userName в вÑÑепÑиведÑнном коде â назÑваÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑми.
ÐлобалÑнÑе пеÑеменнÑе Ð²Ð¸Ð´Ð¸Ð¼Ñ Ð´Ð»Ñ Ð»Ñбой ÑÑнкÑии (еÑли ÑолÑко Ð¸Ñ Ð½Ðµ пеÑекÑÑваÑÑ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑе локалÑнÑе пеÑеменнÑе).
ÐелаÑелÑно ÑводиÑÑ Ð¸ÑполÑзование глобалÑнÑÑ Ð¿ÐµÑеменнÑÑ Ðº минимÑмÑ. Ð ÑовÑеменном коде обÑÑно мало или ÑовÑем Ð½ÐµÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑÑ Ð¿ÐµÑеменнÑÑ . ХоÑÑ Ð¾Ð½Ð¸ иногда Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð²Ð°Ð¶Ð½ÐµÐ¹ÑÐ¸Ñ Â«Ð¾Ð±ÑепÑоекÑовÑÑ Â» даннÑÑ .
ÐаÑамеÑÑÑ
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ пеÑедаÑÑ Ð²Ð½ÑÑÑÑ ÑÑнкÑии лÑбÑÑ Ð¸Ð½ÑоÑмаÑиÑ, иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑÑ.
РнижепÑиведÑнном пÑимеÑе ÑÑнкÑии пеÑедаÑÑÑÑ Ð´Ð²Ð° паÑамеÑÑа: from и text.
function showMessage(from, text) { // паÑамеÑÑÑ: from, text
alert(from + ': ' + text);
}
showMessage('ÐнÑ', 'ÐÑивеÑ!'); // ÐнÑ: ÐÑивеÑ! (*)
showMessage('ÐнÑ', "Ðак дела?"); // ÐнÑ: Ðак дела? (**)
Ðогда ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ Ð² ÑÑÑокаÑ
(*) и (**), пеÑеданнÑе знаÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸ÑÑÑÑÑÑ Ð² локалÑнÑе пеÑеменнÑе from и text. ÐаÑем они иÑполÑзÑÑÑÑÑ Ð² Ñеле ÑÑнкÑии.
ÐÐ¾Ñ ÐµÑÑ Ð¾Ð´Ð¸Ð½ пÑимеÑ: Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ from, и Ð¼Ñ Ð¿ÐµÑедаÑм ÐµÑ ÑÑнкÑии. ÐбÑаÑиÑе внимание: ÑÑнкÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÐµÑ Ð·Ð½Ð°Ñение from, но ÑÑо изменение не видно ÑнаÑÑжи. ФÑнкÑÐ¸Ñ Ð²Ñегда полÑÑÐ°ÐµÑ ÑолÑко ÐºÐ¾Ð¿Ð¸Ñ Ð·Ð½Ð°ÑениÑ:
function showMessage(from, text) {
from = '*' + from + '*'; // немного ÑкÑаÑим "from"
alert( from + ': ' + text );
}
let from = "ÐнÑ";
showMessage(from, "ÐÑивеÑ"); // *ÐнÑ*: ÐÑивеÑ
// знаÑение "from" оÑÑалоÑÑ Ð¿Ñежним, ÑÑнкÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð° знаÑение локалÑной пеÑеменной
alert( from ); // ÐнÑ
ÐнаÑение, пеÑедаваемое в каÑеÑÑве паÑамеÑÑа ÑÑнкÑии, Ñакже назÑваеÑÑÑ Ð°ÑгÑменÑом.
ÐÑÑгими Ñловами:
- ÐаÑамеÑÑ â ÑÑо пеÑеменнаÑ, ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð² кÑÑглÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ Ð² обÑÑвлении ÑÑнкÑии.
- ÐÑгÑÐ¼ÐµÐ½Ñ â ÑÑо знаÑение, коÑоÑое пеÑедаÑÑÑÑ ÑÑнкÑии пÑи ÐµÑ Ð²Ñзове.
ÐÑ Ð¾Ð±ÑÑвлÑем ÑÑнкÑии Ñо ÑпиÑком паÑамеÑÑов, заÑем вÑзÑваем Ð¸Ñ , пеÑÐµÐ´Ð°Ð²Ð°Ñ Ð°ÑгÑменÑÑ.
РаÑÑмаÑÑÐ¸Ð²Ð°Ñ Ð¿ÑиведÑннÑй вÑÑе пÑимеÑ, Ð¼Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ ÑказаÑÑ: «ÑÑнкÑÐ¸Ñ showMessage обÑÑвлÑеÑÑÑ Ñ Ð´Ð²ÑÐ¼Ñ Ð¿Ð°ÑамеÑÑами, заÑем вÑзÑваеÑÑÑ Ñ Ð´Ð²ÑÐ¼Ñ Ð°ÑгÑменÑами: from и "ÐÑивеÑ"».
ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ
ÐÑли пÑи вÑзове ÑÑнкÑии аÑгÑÐ¼ÐµÐ½Ñ Ð½Ðµ бÑл Ñказан, Ñо его знаÑением ÑÑановиÑÑÑ undefined.
ÐапÑимеÑ, вÑÑеÑпомÑнÑÑÐ°Ñ ÑÑнкÑÐ¸Ñ showMessage(from, text) Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзвана Ñ Ð¾Ð´Ð½Ð¸Ð¼ аÑгÑменÑом:
showMessage("ÐнÑ");
ÐÑо не пÑиведÑÑ Ðº оÑибке. Такой вÑзов вÑÐ²ÐµÐ´ÐµÑ "*ÐнÑ*: undefined". РвÑзове не Ñказан паÑамеÑÑ text, поÑÑÐ¾Ð¼Ñ Ð¿ÑедполагаеÑÑÑ, ÑÑо text === undefined.
ÐÑли Ð¼Ñ Ñ
оÑим задаÑÑ Ð¿Ð°ÑамеÑÑÑ text знаÑение по ÑмолÑаниÑ, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ ÐµÐ³Ð¾ поÑле =:
function showMessage(from, text = "ÑекÑÑ Ð½Ðµ добавлен") {
alert( from + ": " + text );
}
showMessage("ÐнÑ"); // ÐнÑ: ÑекÑÑ Ð½Ðµ добавлен
ТепеÑÑ, еÑли паÑамеÑÑ text не Ñказан, его знаÑением бÑÐ´ÐµÑ "ÑекÑÑ Ð½Ðµ добавлен"
Рданном ÑлÑÑае "ÑекÑÑ Ð½Ðµ добавлен" ÑÑо ÑÑÑока, но на ÐµÑ Ð¼ÐµÑÑе могло Ð±Ñ Ð±ÑÑÑ Ð¸ более Ñложное вÑÑажение, коÑоÑое Ð±Ñ Ð²ÑÑиÑлÑлоÑÑ Ð¸ пÑиÑваивалоÑÑ Ð¿Ñи оÑÑÑÑÑÑвии паÑамеÑÑа. ÐапÑимеÑ:
function showMessage(from, text = anotherFunction()) {
// anotherFunction() вÑполниÑÑÑ ÑолÑко еÑли не пеÑедан text
// ÑезÑлÑÑаÑом бÑÐ´ÐµÑ Ð·Ð½Ð°Ñение text
}
Ð JavaScript паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑÑиÑлÑÑÑÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ Ð±ÐµÐ· ÑооÑвеÑÑÑвÑÑÑего аÑгÑменÑа.
РпÑиведÑнном вÑÑе пÑимеÑе, ÑÑнкÑÐ¸Ñ anotherFunction() не бÑÐ´ÐµÑ Ð²Ñзвана вообÑе, еÑли Ñказан аÑгÑÐ¼ÐµÐ½Ñ text.
С дÑÑгой ÑÑоÑонÑ, ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо вÑзÑваÑÑÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда аÑгÑÐ¼ÐµÐ½Ñ text оÑÑÑÑÑÑвÑеÑ.
Ранние веÑÑии JavaScript не поддеÑживали паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. ÐоÑÑÐ¾Ð¼Ñ ÑÑÑеÑÑвÑÑÑ Ð°Ð»ÑÑеÑнаÑивнÑе ÑпоÑобÑ, коÑоÑÑе могÑÑ Ð²ÑÑÑеÑаÑÑÑÑ Ð² ÑÑаÑÑÑ ÑкÑипÑÐ°Ñ .
ÐапÑимеÑ, ÑÐ²Ð½Ð°Ñ Ð¿ÑовеÑка на undefined:
function showMessage(from, text) {
if (text === undefined) {
text = 'ÑекÑÑ Ð½Ðµ добавлен';
}
alert( from + ": " + text );
}
â¦Ðли Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа ||:
function showMessage(from, text) {
// ÐÑли знаÑение text ложно, Ñогда пÑиÑвоиÑÑ Ð¿Ð°ÑамеÑÑÑ text знаÑение по ÑмолÑаниÑ
// замеÑим, ÑÑо пÑи ÑÑом пÑÑÑÐ°Ñ ÑÑÑока text === "" бÑÐ´ÐµÑ Ñакже ÑÑиÑаÑÑÑÑ Ð¾ÑÑÑÑÑÑвÑÑÑим знаÑением
text = text || 'ÑекÑÑ Ð½Ðµ добавлен';
...
}
ÐлÑÑеÑнаÑивнÑе паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ
Ðногда Ð¸Ð¼ÐµÐµÑ ÑмÑÑл пÑиÑваиваÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑов не в обÑÑвлении ÑÑнкÑии, а на более позднем ÑÑапе.
Ðо вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑнкÑии Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пÑовеÑиÑÑ, пеÑедан ли паÑамеÑÑ, ÑÑавнив его Ñ undefined:
function showMessage(text) {
// ...
if (text === undefined) { // еÑли паÑамеÑÑ Ð¾ÑÑÑÑÑÑвÑеÑ
text = 'пÑÑÑое ÑообÑение';
}
alert(text);
}
showMessage(); // пÑÑÑое ÑообÑение
â¦Ðли Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ||:
function showMessage(text) {
// еÑли знаÑение text ложно или ÑавнÑеÑÑÑ undefined, Ñогда пÑиÑвоиÑÑ text знаÑение 'пÑÑÑо'
text = text || 'пÑÑÑо';
...
}
СовÑеменнÑе движки JavaScript поддеÑживаÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð½Ñлевого ÑлиÑÐ½Ð¸Ñ ??. Ðго иÑполÑзование бÑÐ´ÐµÑ Ð»ÑÑÑей пÑакÑикой, в ÑлÑÑае, еÑли болÑÑинÑÑво ложнÑÑ
знаÑений, ÑакиÑ
как 0, ÑледÑÐµÑ ÑаÑÑениваÑÑ ÐºÐ°Ðº «ноÑмалÑнÑе».
function showCount(count) {
// еÑли count Ñавен undefined или null, показаÑÑ "неизвеÑÑно"
alert(count ?? "неизвеÑÑно");
}
showCount(0); // 0
showCount(null); // неизвеÑÑно
showCount(); // неизвеÑÑно
ÐозвÑÐ°Ñ Ð·Ð½Ð°ÑениÑ
ФÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ ÑезÑлÑÑаÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¿ÐµÑедан в вÑзвавÑий ÐµÑ ÐºÐ¾Ð´.
ÐÑоÑÑейÑим пÑимеÑом Ð¼Ð¾Ð¶ÐµÑ ÑлÑжиÑÑ ÑÑнкÑÐ¸Ñ ÑÐ»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð²ÑÑ ÑиÑел:
function sum(a, b) {
return a + b;
}
let result = sum(1, 2);
alert( result ); // 3
ÐиÑекÑива return Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ñ
одиÑÑÑÑ Ð² лÑбом меÑÑе Ñела ÑÑнкÑии. Ðак ÑолÑко вÑполнение доÑ
Ð¾Ð´Ð¸Ñ Ð´Ð¾ ÑÑого меÑÑа, ÑÑнкÑÐ¸Ñ Ð¾ÑÑанавливаеÑÑÑ, и знаÑение возвÑаÑаеÑÑÑ Ð² вÑзвавÑий ÐµÑ ÐºÐ¾Ð´ (пÑиÑваиваеÑÑÑ Ð¿ÐµÑеменной result вÑÑе).
ÐÑзовов return Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑколÑко, напÑимеÑ:
function checkAge(age) {
if (age >= 18) {
return true;
} else {
return confirm('Ð ÑодиÑели ÑазÑеÑили?');
}
}
let age = prompt('СколÑко вам леÑ?', 18);
if ( checkAge(age) ) {
alert( 'ÐоÑÑÑп полÑÑен' );
} else {
alert( 'ÐоÑÑÑп закÑÑÑ' );
}
Ðозможно иÑполÑзоваÑÑ return и без знаÑениÑ. ÐÑо пÑиведÑÑ Ðº Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ Ð²ÑÑ
Ð¾Ð´Ñ Ð¸Ð· ÑÑнкÑии.
ÐапÑимеÑ:
function showMovie(age) {
if ( !checkAge(age) ) {
return;
}
alert( "Ðам показÑваеÑÑÑ ÐºÐ¸Ð½Ð¾" ); // (*)
// ...
}
Ркоде вÑÑе, еÑли checkAge(age) веÑнÑÑ false, showMovie не вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ alert.
return или без него â undefinedÐÑли ÑÑнкÑÐ¸Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°ÑениÑ, ÑÑо вÑÑ Ñавно, как еÑли Ð±Ñ Ð¾Ð½Ð° возвÑаÑала undefined:
function doNothing() { /* пÑÑÑо */ }
alert( doNothing() === undefined ); // true
ÐÑÑÑой return аналогиÑен return undefined:
function doNothing() {
return;
}
alert( doNothing() === undefined ); // true
return и его знаÑениемÐÐ»Ñ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð³Ð¾ вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² return Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð¼Ð°Ð½Ñиво ÑазмеÑÑиÑÑ ÐµÐ³Ð¾ на неÑколÑкиÑ
оÑделÑнÑÑ
ÑÑÑокаÑ
, напÑÐ¸Ð¼ÐµÑ Ñак:
return
(some + long + expression + or + whatever * f(a) + f(b))
Ðод не вÑполниÑÑÑ, поÑÐ¾Ð¼Ñ ÑÑо инÑеÑпÑеÑаÑÐ¾Ñ JavaScript подÑÑÐ°Ð²Ð¸Ñ ÑоÑÐºÑ Ñ Ð·Ð°Ð¿ÑÑой поÑле return. ÐÐ»Ñ Ð½ÐµÐ³Ð¾ ÑÑо бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
return;
(some + long + expression + or + whatever * f(a) + f(b))
Таким обÑазом, ÑÑо ÑакÑиÑеÑки ÑÑало пÑÑÑÑм return.
ÐÑли Ð¼Ñ Ñ
оÑим, ÑÑÐ¾Ð±Ñ Ð²Ð¾Ð·Ð²ÑаÑаемое вÑÑажение занимало неÑколÑко ÑÑÑок, нÑжно наÑаÑÑ ÐµÐ³Ð¾ на Ñой же ÑÑÑоке, ÑÑо и return. Ðли, Ñ
оÑÑ Ð±Ñ, поÑÑавиÑÑ Ñам оÑкÑÑваÑÑÑÑ ÑкобкÑ, Ð²Ð¾Ñ Ñак:
return (
some + long + expression
+ or +
whatever * f(a) + f(b)
)
Ð Ñогда вÑÑ ÑÑабоÑаеÑ, как задÑмано.
ÐÑÐ±Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑнкÑии
ФÑнкÑÐ¸Ñ â ÑÑо дейÑÑвие. ÐоÑÑÐ¾Ð¼Ñ Ð¸Ð¼Ñ ÑÑнкÑии обÑÑно ÑвлÑеÑÑÑ Ð³Ð»Ð°Ð³Ð¾Ð»Ð¾Ð¼. Ðно должно бÑÑÑ ÐºÑаÑким, ÑоÑнÑм и опиÑÑваÑÑ Ð´ÐµÐ¹ÑÑвие ÑÑнкÑии, ÑÑÐ¾Ð±Ñ Ð¿ÑогÑаммиÑÑ, коÑоÑÑй бÑÐ´ÐµÑ ÑиÑаÑÑ ÐºÐ¾Ð´, полÑÑил веÑное пÑедÑÑавление о Ñом, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÑÑнкÑиÑ.
Ðак пÑавило, иÑполÑзÑÑÑÑÑ Ð³Ð»Ð°Ð³Ð¾Ð»ÑнÑе пÑеÑикÑÑ, обознаÑаÑÑие обÑий Ñ Ð°ÑакÑÐµÑ Ð´ÐµÐ¹ÑÑвиÑ, поÑле коÑоÑÑÑ ÑледÑÐµÑ ÑÑоÑнение. ÐбÑÑно в ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ ÑазÑабоÑÑиков дейÑÑвÑÑÑ ÑоглаÑениÑ, каÑаÑÑиеÑÑ Ð·Ð½Ð°Ñений ÑÑÐ¸Ñ Ð¿ÑеÑикÑов.
ÐапÑимеÑ, ÑÑнкÑии, наÑинаÑÑиеÑÑ Ñ "show" обÑÑно ÑÑо-Ñо показÑваÑÑ.
ФÑнкÑии, наÑинаÑÑиеÑÑ Ñâ¦
"getâ¦"â возвÑаÑаÑÑ Ð·Ð½Ð°Ñение,"calcâ¦"â ÑÑо-Ñо вÑÑиÑлÑÑÑ,"createâ¦"â ÑÑо-Ñо ÑоздаÑÑ,"checkâ¦"â ÑÑо-Ñо пÑовеÑÑÑÑ Ð¸ возвÑаÑаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение, и Ñ.д.
ÐÑимеÑÑ ÑÐ°ÐºÐ¸Ñ Ð¸Ð¼Ñн:
showMessage(..) // показÑÐ²Ð°ÐµÑ ÑообÑение
getAge(..) // возвÑаÑÐ°ÐµÑ Ð²Ð¾Ð·ÑаÑÑ (полÑÑÐ°Ñ ÐµÐ³Ð¾ каким-Ñо обÑазом)
calcSum(..) // вÑÑиÑлÑÐµÑ ÑÑÐ¼Ð¼Ñ Ð¸ возвÑаÑÐ°ÐµÑ ÑезÑлÑÑаÑ
createForm(..) // ÑоздаÑÑ ÑоÑÐ¼Ñ (и обÑÑно возвÑаÑÐ°ÐµÑ ÐµÑ)
checkPermission(..) // пÑовеÑÑÐµÑ Ð´Ð¾ÑÑÑп, возвÑаÑÐ°Ñ true/false
ÐлагодаÑÑ Ð¿ÑеÑикÑам, пÑи пеÑвом взглÑде на Ð¸Ð¼Ñ ÑÑнкÑии ÑÑановиÑÑÑ Ð¿Ð¾Ð½ÑÑнÑм, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÐµÑ ÐºÐ¾Ð´, и какое знаÑение она Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ.
ФÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° делаÑÑ ÑолÑко Ñо, ÑÑо Ñвно подÑазÑмеваеÑÑÑ ÐµÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼. Ð ÑÑо должно бÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ дейÑÑвием.
Ðва незавиÑимÑÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð¾Ð±ÑÑно подÑазÑмеваÑÑ Ð´Ð²Ðµ ÑÑнкÑии, даже еÑли пÑедполагаеÑÑÑ, ÑÑо они бÑдÑÑ Ð²ÑзÑваÑÑÑÑ Ð²Ð¼ÐµÑÑе (в ÑÑом ÑлÑÑае Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаÑÑ ÑÑеÑÑÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¸Ñ Ð²ÑзÑваÑÑ).
ÐеÑколÑко пÑимеÑов, коÑоÑÑе наÑÑÑаÑÑ ÑÑо пÑавило:
getAgeâ бÑÐ´ÐµÑ Ð¿Ð»Ð¾Ñ Ð¸Ð¼ вÑбоÑом, еÑли ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð²ÑводиÑÑalertÑ Ð²Ð¾Ð·ÑаÑÑом (должна ÑолÑко возвÑаÑаÑÑ ÐµÐ³Ð¾).createFormâ бÑÐ´ÐµÑ Ð¿Ð»Ð¾Ñ Ð¸Ð¼ вÑбоÑом, еÑли ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð´Ð¾ÐºÑменÑ, добавлÑÑ ÑоÑÐ¼Ñ Ð² него (должна ÑолÑко ÑоздаваÑÑ ÑоÑÐ¼Ñ Ð¸ возвÑаÑаÑÑ ÐµÑ).checkPermissionâ бÑÐ´ÐµÑ Ð¿Ð»Ð¾Ñ Ð¸Ð¼ вÑбоÑом, еÑли ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑобÑажаÑÑ ÑообÑение Ñ ÑекÑÑомдоÑÑÑп ÑазÑеÑÑн/запÑеÑÑн(должна ÑолÑко вÑполнÑÑÑ Ð¿ÑовеÑÐºÑ Ð¸ возвÑаÑаÑÑ ÐµÑ ÑезÑлÑÑаÑ).
Ð ÑÑÐ¸Ñ Ð¿ÑимеÑÐ°Ñ Ð¸ÑполÑзовалиÑÑ Ð¾Ð±ÑепÑинÑÑÑе ÑмÑÑÐ»Ñ Ð¿ÑеÑикÑов. ÐонеÑно, Ð²Ñ Ð² команде можеÑе договоÑиÑÑÑÑ Ð¾ дÑÑÐ³Ð¸Ñ Ð·Ð½Ð°ÑениÑÑ , но обÑÑно они мало оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¾Ð±ÑепÑинÑÑÑÑ . РлÑбом ÑлÑÑае Ð²Ñ Ð¸ ваÑа команда Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑÑко понимаÑÑ, ÑÑо знаÑÐ¸Ñ Ð¿ÑеÑикÑ, ÑÑо ÑÑнкÑÐ¸Ñ Ñ Ð½Ð¸Ð¼ Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ»Ð°ÑÑ, а Ñего не можеÑ.
Ðмена ÑÑнкÑий, коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð¾ÑÐµÐ½Ñ ÑаÑÑо, иногда делаÑÑ ÑвеÑÑ ÐºÐ¾ÑоÑкими.
ÐапÑимеÑ, ÑÑеймвоÑк jQuery опÑеделÑÐµÑ ÑÑнкÑÐ¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ $. РбиблиоÑеке Lodash оÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿ÑедÑÑавлена именем _.
ÐÑо иÑклÑÑениÑ. РоÑновном имена ÑÑнкÑий Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð² меÑÑ ÐºÑаÑкими и опиÑаÑелÑнÑми.
ФÑнкÑии == ÐомменÑаÑии
ФÑнкÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÐºÐ¾ÑоÑкими и делаÑÑ ÑолÑко ÑÑо-Ñо одно. ÐÑли ÑÑо ÑÑо-Ñо болÑÑое, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑазбиÑÑ ÑÑнкÑÐ¸Ñ Ð½Ð° неÑколÑко менÑÑÐ¸Ñ . Ðногда ÑледоваÑÑ ÑÑÐ¾Ð¼Ñ Ð¿ÑÐ°Ð²Ð¸Ð»Ñ Ð½ÐµÐ¿ÑоÑÑо, но ÑÑо опÑеделÑнно Ñ Ð¾ÑоÑее пÑавило.
ÐеболÑÑие ÑÑнкÑии не ÑолÑко облегÑаÑÑ ÑеÑÑиÑование и оÑÐ»Ð°Ð´ÐºÑ â Ñамо ÑÑÑеÑÑвование ÑÐ°ÐºÐ¸Ñ ÑÑнкÑий вÑполнÑÐµÑ ÑÐ¾Ð»Ñ Ñ Ð¾ÑоÑÐ¸Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑиев!
ÐапÑимеÑ, ÑÑавним ниже две ÑÑнкÑии showPrimes(n). ÐÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· ниÑ
вÑÐ²Ð¾Ð´Ð¸Ñ Ð¿ÑоÑÑое ÑиÑло до n.
ÐеÑвÑй ваÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑзÑÐµÑ Ð¼ÐµÑÐºÑ nextPrime:
function showPrimes(n) {
nextPrime: for (let i = 2; i < n; i++) {
for (let j = 2; j < i; j++) {
if (i % j == 0) continue nextPrime;
}
alert( i ); // пÑоÑÑое
}
}
ÐÑоÑой ваÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑзÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ ÑÑнкÑÐ¸Ñ isPrime(n) Ð´Ð»Ñ Ð¿ÑовеÑки на пÑоÑÑое:
function showPrimes(n) {
for (let i = 2; i < n; i++) {
if (!isPrime(i)) continue;
alert(i); // пÑоÑÑое
}
}
function isPrime(n) {
for (let i = 2; i < n; i++) {
if ( n % i == 0) return false;
}
return true;
}
ÐÑоÑой ваÑÐ¸Ð°Ð½Ñ Ð»ÐµÐ³Ñе Ð´Ð»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ, не пÑавда ли? ÐмеÑÑо кÑÑка кода Ð¼Ñ Ð²Ð¸Ð´Ð¸Ð¼ название дейÑÑÐ²Ð¸Ñ (isPrime). Ðногда ÑазÑабоÑÑики назÑваÑÑ Ñакой код ÑамодокÑменÑиÑÑемÑм.
Таким обÑазом, допÑÑÑимо ÑоздаваÑÑ ÑÑнкÑии, даже еÑли Ð¼Ñ Ð½Ðµ планиÑÑем повÑоÑно иÑполÑзоваÑÑ Ð¸Ñ . Такие ÑÑнкÑии ÑÑÑÑкÑÑÑиÑÑÑÑ ÐºÐ¾Ð´ и делаÑÑ ÐµÐ³Ð¾ более понÑÑнÑм.
ÐÑого
ÐбÑÑвление ÑÑнкÑии Ð¸Ð¼ÐµÐµÑ Ð²Ð¸Ð´:
function имÑ(паÑамеÑÑÑ, ÑеÑез, запÑÑÑÑ) {
/* Ñело, код ÑÑнкÑии */
}
- ÐеÑедаваемÑе знаÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸ÑÑÑÑÑÑ Ð² паÑамеÑÑÑ ÑÑнкÑии и ÑÑановÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑми пеÑеменнÑми.
- ФÑнкÑии имеÑÑ Ð´Ð¾ÑÑÑп к внеÑним пеÑеменнÑм. Ðо ÑÑо ÑабоÑÐ°ÐµÑ ÑолÑко изнÑÑÑи наÑÑжÑ. Ðод вне ÑÑнкÑии не Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑпа к ÐµÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑм пеÑеменнÑм.
- ФÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð·Ð½Ð°Ñение. ÐÑли ÑÑого не пÑоиÑÑ
одиÑ, Ñогда ÑезÑлÑÑÐ°Ñ Ñавен
undefined.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑделаÑÑ ÐºÐ¾Ð´ более ÑиÑÑÑм и понÑÑнÑм, ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑе пеÑеменнÑе и паÑамеÑÑÑ ÑÑнкÑий, не полÑзоваÑÑÑÑ Ð²Ð½ÐµÑними пеÑеменнÑми.
ФÑнкÑиÑ, коÑоÑÐ°Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð¿Ð°ÑамеÑÑÑ, ÑабоÑÐ°ÐµÑ Ñ Ð½Ð¸Ð¼Ð¸ и заÑем возвÑаÑÐ°ÐµÑ ÑезÑлÑÑаÑ, гоÑаздо понÑÑнее ÑÑнкÑии, вÑзÑваемой без паÑамеÑÑов, но изменÑÑÑей внеÑние пеÑеменнÑе, ÑÑо ÑÑеваÑо побоÑнÑми ÑÑÑекÑами.
Ðменование ÑÑнкÑий:
- ÐÐ¼Ñ ÑÑнкÑии должно понÑÑно и ÑÑÑко оÑÑажаÑÑ, ÑÑо она делаеÑ. Увидев ÐµÑ Ð²Ñзов в коде, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑÑ Ð¶Ðµ понимаÑÑ, ÑÑо она делаеÑ, и ÑÑо возвÑаÑаеÑ.
- ФÑнкÑÐ¸Ñ â ÑÑо дейÑÑвие, поÑÑÐ¾Ð¼Ñ ÐµÑ Ð¸Ð¼Ñ Ð¾Ð±ÑÑно ÑвлÑеÑÑÑ Ð³Ð»Ð°Ð³Ð¾Ð»Ð¾Ð¼.
- ÐÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ обÑепÑинÑÑÑÑ
пÑеÑикÑов, ÑакиÑ
как:
createâ¦,showâ¦,getâ¦,checkâ¦Ð¸ Ñ.д. ÐолÑзÑйÑеÑÑ Ð¸Ð¼Ð¸ как подÑказками, поÑÑнÑÑÑими, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÑÑнкÑиÑ.
ФÑнкÑии ÑвлÑÑÑÑÑ Ð¾ÑновнÑми ÑÑÑоиÑелÑнÑми блоками ÑкÑипÑов. ÐÑ ÑаÑÑмоÑÑели лиÑÑ Ð¾ÑÐ½Ð¾Ð²Ñ ÑÑнкÑий в JavaScript, но Ñже ÑейÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаваÑÑ Ð¸ иÑполÑзоваÑÑ Ð¸Ñ . ÐÑо ÑолÑко наÑало пÑÑи. ÐÑ Ð±Ñдем неоднокÑаÑно возвÑаÑаÑÑÑÑ Ðº ÑÑнкÑиÑм и изÑÑаÑÑ Ð¸Ñ Ð²ÑÑ Ð±Ð¾Ð»ÐµÐµ и более глÑбоко.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)