ÐÑÑÐ³Ð°Ñ Ð²Ð°Ð¶Ð½Ð°Ñ ÐºÐ¾Ð½ÑепÑÐ¸Ñ Ð² кодиÑовании â ÑÑнкÑии â позволÑÑÑ Ñ ÑаниÑÑ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð°, коÑоÑÑй вÑполнÑÐµÑ Ð¾Ð´Ð½Ñ Ð·Ð°Ð´Ð°ÑÑ Ð²Ð½ÑÑÑи опÑеделÑнного блока, а заÑем вÑзÑваÑÑ ÑÑÐ¾Ñ ÐºÐ¾Ð´ вÑÑкий Ñаз, когда вам ÑÑо нÑжно, иÑполÑзÑÑ Ð¾Ð´Ð½Ñ ÐºÐ¾ÑоÑкÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð²Ð²Ð¾Ð´Ð¸ÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ код неÑколÑко Ñаз.
Ð ÑÑой ÑÑаÑÑе Ð¼Ñ ÑаÑÑмоÑÑим ÑÑндаменÑалÑнÑе конÑепÑии ÑÑнкÑий, Ñакие как базовÑй ÑинÑакÑиÑ, ÑпоÑÐ¾Ð±Ñ Ð²Ñзова и Ð¸Ñ Ð¾Ð¿ÑеделениÑ, облаÑÑÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð¸ паÑамеÑÑÑ.
ÐÑедпоÑÑлки: ÐаÑалÑÐ½Ð°Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑÐ½Ð°Ñ Ð³ÑамоÑноÑÑÑ, оÑÐ½Ð¾Ð²Ñ HTML и CSS, пеÑвÑе Ñаги JavaScript. ЦелÑ: ÐонÑÑÑ ÑÑндаменÑалÑнÑе оÑÐ½Ð¾Ð²Ñ ÑÑнкÑий ÑзÑка JavaScript. Ðде можно вÑÑÑеÑиÑÑ ÑÑнкÑии?Ð JavaScript, Ð²Ñ Ð²ÐµÐ·Ð´Ðµ ÑведиÑе ÑÑнкÑии. Ðа Ñамом деле, Ð¼Ñ Ð¿Ð¾Ð»ÑзовалиÑÑ ÑÑнкÑиÑми на пÑоÑÑжении вÑего кÑÑÑа; ÑолÑко Ð¼Ñ Ð½Ðµ говоÑили об ÑÑом ÑлиÑком ÑаÑÑо. ТепеÑÑ Ð½Ð°ÑÑÑпило вÑемÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð³Ð¾Ð²Ð¾ÑиÑÑ Ð¾ ÑÑнкÑиÑÑ Ð±Ð¾Ð»ÐµÐµ конкÑеÑно и ÑазобÑаÑÑ Ð¸Ñ ÑинÑакÑиÑ.
РзнаÑиÑелÑном колиÑеÑÑве ÑлÑÑаев, когда Ð²Ñ Ð¿Ð¾Ð»ÑзÑеÑеÑÑ ÑÑÑÑкÑÑÑой JavaScript, в коÑоÑой еÑÑÑ Ð¿Ð°Ñа обÑÑнÑÑ
Ñкобок â ()
â и пÑи ÑÑом, ÑÑо не ÑвлÑеÑÑÑ ÑÑÑÑкÑÑÑой Ñипа Ñикл for, while, или do...while Ñикл, или if...else конÑÑÑÑкÑиÑ, Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑнкÑиÑ.
Ð ÑÑом кÑÑÑе Ð¼Ñ Ð¸ÑполÑзовали ÑÑнкÑии, вÑÑÑоеннÑе в бÑаÑзеÑ. ÐаждÑй Ñаз, когда Ð¼Ñ Ð¼Ð°Ð½Ð¸Ð¿ÑлиÑовали ÑекÑÑовой ÑÑÑокой, напÑимеÑ:
var myText = "Я ÑÑÑока";
var newString = myText.replace("ÑÑÑока", "ÑоÑиÑка");
console.log(newString);
// ФÑнкÑÐ¸Ñ ÑÑÑоки replace() пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑокÑ,
// заменÑÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ð½Ð° дÑÑгÑÑ, и возвÑаÑаеÑ
// новÑÑ ÑÑÑÐ¾ÐºÑ Ñ Ð·Ð°Ð¼ÐµÐ½ÑннÑм ÑодеÑжимÑм
Ðли каждÑй Ñаз, когда Ð¼Ñ Ð¼Ð°Ð½Ð¸Ð¿ÑлиÑовали маÑÑивом:
var myArray = ["Я", "лÑблÑ", "ÑоколаднÑÑ
", "лÑгÑÑек"];
var madeAString = myArray.join(" ");
console.log(madeAString);
// ФÑнкÑÐ¸Ñ join() пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¼Ð°ÑÑив, ÑоединÑеÑ
// вÑе ÑлеменÑÑ Ð¼Ð°ÑÑива вмеÑÑе в Ð¾Ð´Ð½Ñ ÑÑÑокÑ,
// и возвÑаÑÐ°ÐµÑ ÑÑÑ Ð½Ð¾Ð²ÑÑ ÑÑÑокÑ
Ðли каждÑй Ñаз, когда Ð¼Ñ Ð³ÐµÐ½ÐµÑиÑовали ÑлÑÑайное ÑиÑло:
var myNumber = Math.random();
// ФÑнкÑÐ¸Ñ random() генеÑиÑÑÐµÑ ÑлÑÑайное ÑиÑло Ð¾Ñ 0 до 1,
// и возвÑаÑÐ°ÐµÑ ÑÑо ÑиÑло
...Ð¼Ñ Ð¸ÑполÑзовали ÑÑнкÑии!
ÐÑимеÑание: ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑÑавиÑÑ ÑÑи ÑÑÑоки в конÑÐ¾Ð»Ñ Ð²Ð°Ñего бÑаÑзеÑа, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÑмоÑÑеÑÑ, как ÑабоÑаÑÑ ÑÑи ÑÑнкÑии.
ФакÑиÑеÑки, ÑаÑÑÑ ÐºÐ¾Ð´Ð°, коÑоÑÑй Ð²Ñ Ð²ÑзÑваеÑе, когда ÑÑÑлаеÑеÑÑ Ð½Ð° вÑÑÑоеннÑÑ ÑÑнкÑÐ¸Ñ Ð±ÑаÑзеÑа (вообÑажаемое Ñлово Ð´Ð»Ñ ÐµÑ Ð·Ð°Ð¿ÑÑка или вÑполнениÑ), не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°Ð¿Ð¸Ñана на JavaScript â многие из ÑÑÐ¸Ñ ÑÑнкÑий вÑзÑваÑÑ ÑаÑÑи Ñонового кода бÑаÑзеÑа, коÑоÑÑй напиÑан в оÑновном на ÑиÑÑемнÑÑ ÑзÑÐºÐ°Ñ Ð½Ð¸Ð·ÐºÐ¾Ð³Ð¾ ÑÑовнÑ, ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº C ++, а не на веб-ÑзÑÐºÐ°Ñ , ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº JavaScript.
ÐмейÑе в видÑ, ÑÑо некоÑоÑÑе вÑÑÑоеннÑе ÑÑнкÑии бÑаÑзеÑа не ÑвлÑÑÑÑÑ ÑаÑÑÑÑ Ð¾Ñновного ÑзÑка JavaScript â некоÑоÑÑе из Ð½Ð¸Ñ ÑвлÑÑÑÑÑ ÑаÑÑÑÑ API бÑаÑзеÑа, коÑоÑÑе оÑновÑваÑÑÑÑ Ð½Ð° ÑзÑке по ÑмолÑаниÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ ÐµÑÑ Ð±Ð¾Ð»ÑÑÑÑ ÑÑнкÑионалÑноÑÑÑ (подÑобнее Ñм. один из пÑедÑдÑÑÐ¸Ñ Ñазделов ÑÑого кÑÑÑа). Ðолее подÑобно ÑаÑÑмоÑÑим иÑполÑзование API бÑаÑзеÑа в более позднем модÑле кÑÑÑа.
ФÑнкÑии или меÑодÑÐÐ´Ð½Ñ Ð²ÐµÑÑ, коÑоÑÑÑ Ð½Ð°Ð¼ нÑжно пÑоÑÑниÑÑ, пÑежде Ñем двигаÑÑÑÑ Ð´Ð°Ð»ÑÑе - ÑÐµÑ Ð½Ð¸ÑеÑки, вÑÑÑоеннÑе ÑÑнкÑии бÑаÑзеÑа не ÑвлÑÑÑÑÑ ÑÑнкÑиÑми â ÑÑо меÑодÑ. ÐÑо звÑÑÐ¸Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ ÑÑÑаÑно и запÑÑанно, но не волнÑйÑеÑÑ â ÑÑнкÑии и меÑÐ¾Ð´Ñ Ñлова во многом взаимозаменÑемÑ, по кÑайней меÑе Ð´Ð»Ñ Ð½Ð°ÑÐ¸Ñ Ñелей, на данном ÑÑапе ваÑего обÑÑениÑ.
РазниÑа Ð¼ÐµÐ¶Ð´Ñ Ð¼ÐµÑодом и ÑÑнкÑией лиÑÑ Ð² Ñом, ÑÑо меÑÐ¾Ð´Ñ - ÑÑо ÑÑнкÑии, опÑеделÑннÑе внÑÑÑи обÑекÑов. ÐÑÑÑоеннÑе ÑÑнкÑии (меÑодÑ) бÑаÑзеÑа и пеÑеменнÑе (Ñак назÑваемÑе ÑвойÑÑва) Ñ ÑанÑÑÑÑ Ð²Ð½ÑÑÑи ÑÑÑÑкÑÑÑиÑованнÑÑ Ð¾Ð±ÑекÑов, ÑÑÐ¾Ð±Ñ ÑделаÑÑ ÐºÐ¾Ð´ более ÑÑÑекÑивнÑм и более пÑоÑÑÑм в иÑполÑзовании.
Ðам пока не нÑжно изÑÑаÑÑ Ð²Ð½ÑÑÑеннÑÑ ÑабоÑÑ ÑÑÑÑкÑÑÑиÑованнÑÑ Ð¾Ð±ÑекÑов JavaScript - Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе подождаÑÑ, пока Ð½Ð°Ñ Ð±Ð¾Ð»ÐµÐµ поздний модÑÐ»Ñ Ð½Ðµ наÑÑÐ¸Ñ Ð²Ð°Ñ Ð²Ð½ÑÑÑенним ÑабоÑам обÑекÑов и ÑомÑ, как ÑоздаваÑÑ Ñвои ÑобÑÑвеннÑе. Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¼Ñ Ð¿ÑоÑÑо Ñ Ð¾Ñим ÑÑÑÑаниÑÑ Ð»ÑбÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ Ð¿ÑÑаниÑÑ Ð¼ÐµÑода, в ÑÑавнении Ñ ÑÑнкÑиÑми - вÑ, веÑоÑÑно, вÑÑÑеÑиÑе оба ÑеÑмина, когда бÑдеÑе ÑмоÑÑеÑÑ Ð½Ð° доÑÑÑпнÑе ÑвÑзаннÑе ÑеÑÑÑÑÑ ÑеÑез ÐнÑеÑнеÑ.
ÐолÑзоваÑелÑÑкие ÑÑнкÑииРÑÑом кÑÑÑе Ñак же иÑполÑзовалиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие ÑÑнкÑии â ÑÑо ÑÑнкÑии, коÑоÑÑе Ð²Ñ Ð¾Ð¿ÑеделÑеÑе в ÑвоÑм коде, а не внÑÑÑи бÑаÑзеÑа. ÐаждÑй Ñаз, когда Ð²Ñ Ð²Ð¸Ð´ÐµÐ»Ð¸ пÑоизволÑное Ñлово (Ð¸Ð¼Ñ ÑÑнкÑии) Ñ ÐºÑÑглÑми Ñкобками пÑÑмо поÑле него, Ð²Ñ Ð¸ÑполÑзовали полÑзоваÑелÑÑкÑÑ ÑÑнкÑиÑ. РнаÑем пÑимеÑе random-canvas-circles.html (подÑобнее Ñм. иÑÑ
однÑй код) из наÑей ÑÑаÑÑи о ÑиклаÑ
Ð¼Ñ Ð²ÐºÐ»ÑÑили полÑзоваÑелÑÑкÑÑ ÑÑнкÑÐ¸Ñ draw()
, коÑоÑÐ°Ñ Ð²ÑглÑÐ´Ð¸Ñ Ñак:
function draw() {
ctx.clearRect(0, 0, WIDTH, HEIGHT);
for (var i = 0; i < 100; i++) {
ctx.beginPath();
ctx.fillStyle = "rgba(255,0,0,0.5)";
ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
ctx.fill();
}
}
ÐÑа ÑÑнкÑÐ¸Ñ ÑиÑÑÐµÑ 100 ÑлÑÑайнÑÑ
кÑÑгов внÑÑÑи ÑлеменÑа <canvas>
. ÐаждÑй Ñаз, когда Ð¼Ñ Ñ
оÑим ÑÑо ÑделаÑÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑзваÑÑ ÑÑÑ ÑÑнкÑÐ¸Ñ ÑледÑÑÑим обÑазом
вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда Ð¼Ñ Ñ
оÑим повÑоÑиÑÑ ÑÑÐ¾Ñ ÐºÐ¾Ð´, не пиÑаÑÑ ÐµÐ³Ð¾ заново. Ð ÑÑнкÑии могÑÑ ÑодеÑжаÑÑ Ð»Ñбой код, коÑоÑÑй вам нÑавиÑÑÑ - Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе даже вÑзÑваÑÑ Ð´ÑÑгие ÑÑнкÑии внÑÑÑи ÑвоиÑ
ÑÑнкÑий. ÐÑÑеÑпомÑнÑÑÐ°Ñ ÑÑнкÑиÑ, напÑимеÑ, вÑзÑÐ²Ð°ÐµÑ ÑÑнкÑÐ¸Ñ random()
ÑÑи Ñаза, коÑоÑÐ°Ñ Ð²ÑглÑÐ´Ð¸Ñ ÑледÑÑÑим обÑазом:
function random(number) {
return Math.floor(Math.random() * number);
}
Ðам понадобилаÑÑ ÑÑа ÑÑнкÑиÑ, поÑÐ¾Ð¼Ñ ÑÑо вÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð² бÑаÑÐ·ÐµÑ ÑÑнкÑÐ¸Ñ Math.random() генеÑиÑÑÐµÑ ÑлÑÑайное дÑобное ÑиÑло Ð¾Ñ 0 до 1. Ðо Ð¼Ñ Ñ Ð¾Ñим ÑлÑÑайное Ñелое ÑиÑло Ð¾Ñ 0 до Ñказанного ÑиÑла.
ÐÑзов ÑÑнкÑийСкоÑее вÑего, Ð²Ñ Ñже понÑли ÑÑо, но на вÑÑкий ÑлÑÑай ... ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ñле Ñого, как она бÑла опÑеделена, вам нÑжно запÑÑÑиÑÑ Ð¸Ð»Ð¸ вÑзваÑÑ ÐµÑ. ÐÑо делаеÑÑÑ Ð¿ÑÑÑм вклÑÑÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑнкÑии в код где-нибÑдÑ, за коÑоÑÑм ÑледÑÑÑ Ñкобки.
function myFunction() {
alert("пÑивеÑ");
}
myFunction();
// ÐдиновÑеменнÑй вÑзов ÑÑнкÑии
ÐезÑмÑннÑе ÑÑнкÑии
ÐÑ Ð¼Ð¾Ð¶ÐµÑе видеÑÑ ÑÑнкÑии, опÑеделÑннÑе и вÑзÑваемÑе неÑколÑкими ÑазнÑми ÑпоÑобами. Ðо ÑÑого Ð¼Ñ Ñоздавали ÑÑнкÑии Ñаким ÑпоÑобом:
function myFunction() {
alert("пÑивеÑ");
}
Ðо Ð²Ñ Ñакже можеÑе ÑоздаваÑÑ ÑÑнкÑии без имени:
function() {
alert('пÑивеÑ');
}
Ð¢Ð°ÐºÐ°Ñ ÑÑнкÑÐ¸Ñ Ð½Ð°Ð·ÑваеÑÑÑ Ð±ÐµÐ·ÑмÑÐ½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ (или анонимнаÑ) â она не Ð¸Ð¼ÐµÐµÑ Ð¸Ð¼ÐµÐ½Ð¸! Ðна Ñама по Ñебе ниÑего не делаеÑ. ÐбÑÑно Ñакие ÑÑнкÑии иÑполÑзÑÑÑÑÑ Ð²Ð¼ÐµÑÑе Ñ Ð¾Ð±ÑабоÑÑиком ÑобÑÑий, напÑимеÑ, ÑледÑÑÑее бÑÐ´ÐµÑ Ð²ÑзÑваÑÑ ÐºÐ¾Ð´ внÑÑÑи ÑÑнкÑии каждÑй Ñаз, по нажаÑÐ¸Ñ ÑооÑвеÑÑÑвÑÑÑей кнопки:
var myButton = document.querySelector("button");
myButton.onclick = function () {
alert("пÑивеÑ");
};
РпÑиведÑнном пÑимеÑе ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð½Ð° ÑÑÑаниÑе бÑл ÑÐ»ÐµÐ¼ÐµÐ½Ñ <button>
(кнопка), коÑоÑÑÑ Ð½Ñжно нажаÑÑ. ÐÑ Ñже видели ÑакÑÑ ÑÑÑÑкÑÑÑÑ Ð½ÐµÑколÑко Ñаз на пÑоÑÑжении вÑего кÑÑÑа, подÑобнее о ней Ð²Ñ ÑзнаеÑе из ÑледÑÑÑей ÑÑаÑÑи.
ÐÑ Ñакже можеÑе пÑиÑвоиÑÑ Ðº пеÑеменной анонимнÑÑ ÑÑнкÑиÑ, напÑимеÑ:
var myGreeting = function () {
alert("пÑивеÑ");
};
ТепеÑÑ ÑÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ вÑзваÑÑ, иÑполÑзÑÑ:
ФакÑиÑеÑки Ñакой ÑпоÑоб пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð¿ÐµÑеменной имÑ; Ð²Ñ Ñакже можеÑе пÑиÑвоиÑÑ ÑÑнкÑÐ¸Ñ Ð·Ð½Ð°Ñением неÑколÑÐºÐ¸Ñ Ð¿ÐµÑеменнÑÑ , напÑимеÑ:
var anotherGreeting = function () {
alert("пÑивеÑ");
};
ТепеÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ вÑзваÑÑ, иÑполÑзÑÑ Ð»ÑбÑÑ Ð¸Ð· пеÑеменнÑÑ
myGreeting();
anotherGreeting();
Ðо ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð²Ð²ÐµÑÑи в заблÑждение, Ñак ÑÑо не ÑÑÐ¾Ð¸Ñ Ñак делаÑÑ! ÐÑи Ñоздании ÑÑнкÑий лÑÑÑе вÑего пÑидеÑживаÑÑÑÑ ÑледÑÑÑего вида:
function myGreeting() {
alert("пÑивеÑ");
}
ЧаÑе вÑего Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ñе ÑÑнкÑии, ÑÑÐ¾Ð±Ñ Ð¿ÑоÑÑо запÑÑкаÑÑ ÐºÐ¾Ð´ пÑи ÑÑабаÑÑÐ²Ð°Ð½Ð¸Ñ ÑобÑÑÐ¸Ñ - напÑимеÑ, нажаÑие кнопки - Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð±ÑабоÑÑика ÑобÑÑий. ÐпÑÑÑ Ð¶Ðµ, ÑÑо вÑглÑÐ´Ð¸Ñ Ð¿ÑимеÑно Ñак:
myButton.onclick = function () {
alert("пÑивеÑ");
// ÐÑи желании, внÑÑÑи ÑÑой ÑÑнкÑии
// можно напиÑаÑÑ Ð¼Ð½Ð¾Ð³Ð¾ кода.
};
ÐаÑамеÑÑÑ ÑÑнкÑии
ÐекоÑоÑÑе ÑÑнкÑии пÑи Ð¸Ñ Ð²Ñзове ÑÑебÑÑÑ Ñказание паÑамеÑÑов â ÑÑо знаÑениÑ, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð²ÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² кÑÑглÑе Ñкобки ÑÑнкÑии, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе Ð´Ð»Ñ ÐºÐ¾ÑÑекÑной ÑабоÑÑ ÑÑнкÑии.
ÐÑимеÑание: ÐаÑамеÑÑÑ Ð¸Ð½Ð¾Ð³Ð´Ð° назÑваÑÑÑÑ Ð°ÑгÑменÑами, ÑвойÑÑвами или аÑÑибÑÑами.
ÐапÑÐ¸Ð¼ÐµÑ Ð²ÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð² бÑаÑÐ·ÐµÑ ÑÑнкÑÐ¸Ñ Math.random() не ÑÑебÑÐµÑ Ð¿Ð°ÑамеÑÑов. ÐÑи вÑзове, она вÑегда возвÑаÑÐ°ÐµÑ ÑлÑÑайное ÑиÑло Ð¾Ñ 0 до 1:
var myNumber = Math.random();
ÐÑаÑзеÑÐ½Ð°Ñ Ð²ÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ ÑÑнкÑиÑ, ÑабоÑаÑÑÐ°Ñ Ñо ÑÑÑокой, replace() Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð´Ð²Ð° паÑамеÑÑа â ÑÑо подÑÑÑока Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка в оÑновной ÑÑÑоке и ÑÑÑока, на коÑоÑÑÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð·Ð°Ð¼ÐµÐ½Ð° в оÑновной ÑÑÑоке:
var myText = "Я ÑÑÑока";
var newString = myText.replace("ÑÑÑока", "ÑоÑиÑка");
ÐÑимеÑание: ÐÑли Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑказаÑÑ Ð½ÐµÑколÑко паÑамеÑÑов, Ð¸Ñ ÑазделÑÑÑ Ð·Ð°Ð¿ÑÑÑми.
СледÑÐµÑ Ñакже оÑмеÑиÑÑ, ÑÑо иногда паÑамеÑÑÑ ÑвлÑÑÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑми - вам не нÑжно Ð¸Ñ ÑказÑваÑÑ. ÐÑли Ð²Ñ ÑÑого не ÑделаеÑе, ÑÑнкÑиÑ, как пÑавило, пÑÐ¸Ð¼ÐµÑ ÐºÐ°ÐºÐ¾Ðµ-Ñо поведение по ÑмолÑаниÑ. РкаÑеÑÑве пÑимеÑа паÑамеÑÑ ÑÑнкÑии маÑÑива join() необÑзаÑелен:
var myArray = ["Я", "лÑблÑ", "ÑоколаднÑÑ
", "лÑгÑÑек"];
var madeAString = myArray.join(" ");
// ÐеÑнÑÑ 'Я лÑÐ±Ð»Ñ ÑоколаднÑÑ
лÑгÑÑек'
var madeAString = myArray.join();
// ÐеÑнÑÑ 'Я,лÑблÑ,ÑоколаднÑÑ
,лÑгÑÑек'
ÐÑли не Ñказан паÑамеÑÑ Ð´Ð»Ñ Ñимвола ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ / ÑазгÑаниÑениÑ, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð·Ð°Ð¿ÑÑаÑ.
ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи ÑÑнкÑии и конÑликÑÑÐавайÑе немного поговоÑим о scope - оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð°Ñ ÐºÐ¾Ð½ÑепÑÐ¸Ñ Ð¿Ñи ÑабоÑе Ñ ÑÑнкÑиÑми. Ðогда Ð²Ñ ÑоздаÑÑе ÑÑнкÑиÑ, пеÑеменнÑе и дÑÑгие веÑи, опÑеделÑннÑе внÑÑÑи ÑÑнкÑии, Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð²Ð½ÑÑÑи Ð¸Ñ Ð¾ÑделÑной облаÑÑи (scope), ÑÑо ознаÑаеÑ, ÑÑо они запеÑÑÑ Ð² ÑÐ²Ð¾Ð¸Ñ Ð¾ÑделÑнÑÑ Ð¾ÑÑÐµÐºÐ°Ñ , недоÑÑÑпнÑÑ Ð¸Ð· дÑÑÐ³Ð¸Ñ ÑÑнкÑий или из кода вне ÑÑнкÑий.
ÐеÑÑ Ð½Ð¸Ð¹ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð·Ð° пÑеделами вÑÐµÑ Ð²Ð°ÑÐ¸Ñ ÑÑнкÑий назÑваеÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñной облаÑÑÑÑ (global scope). ÐнаÑениÑ, опÑеделÑннÑе в глобалÑном маÑÑÑабе, доÑÑÑÐ¿Ð½Ñ Ð¸Ð·Ð²Ð½Ðµ в коде.
JavaScript наÑÑÑоен Ñаким обÑазом по ÑазнÑм пÑиÑинам - но главнÑм обÑазом из-за безопаÑноÑÑи и оÑганизаÑии. Ðногда Ð²Ñ Ð½Ðµ Ñ Ð¾ÑиÑе, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеменнÑе бÑли доÑÑÑÐ¿Ð½Ñ Ð¸Ð·Ð²Ð½Ðµ в коде - внеÑние ÑкÑипÑÑ, коÑоÑÑе Ð²Ñ Ð²ÑзÑвали из дÑÑÐ³Ð¸Ñ Ð¸ÑÑоÑников, могÑÑ Ð½Ð°ÑаÑÑ ÑабоÑаÑÑ Ñ Ð²Ð°Ñим кодом и вÑзÑваÑÑ Ð¿ÑоблемÑ, поÑÐ¾Ð¼Ñ ÑÑо они иÑполÑзÑÑÑ Ð¾Ð´Ð½Ð¸ и Ñе же имена пеÑеменнÑÑ , как и дÑÑгие ÑаÑÑи кода , вÑзÑÐ²Ð°Ñ ÐºÐ¾Ð½ÑликÑÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñделано злонамеÑенно или пÑоÑÑо ÑлÑÑайно.
ÐапÑимеÑ, Ñкажем, Ñ Ð²Ð°Ñ ÐµÑÑÑ Ñайл HTML, коÑоÑÑй вÑзÑваеÑÑÑ Ð² двÑÑ Ð²Ð½ÐµÑÐ½Ð¸Ñ ÑÐ°Ð¹Ð»Ð°Ñ JavaScript, и оба они имеÑÑ Ð¿ÐµÑеменнÑÑ Ð¸ опÑеделÑннÑÑ ÑÑнкÑиÑ, коÑоÑÑе иÑполÑзÑÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же имÑ:
<!-- Excerpt from my HTML -->
<script src="first.js"></script>
<script src="second.js"></script>
<script>
greeting();
</script>
// first.js
var name = "Chris";
function greeting() {
alert("Hello " + name + ": welcome to our company.");
}
// second.js
var name = "Zaptec";
function greeting() {
alert("Our company is called " + name + ".");
}
Ðбе ÑÑнкÑии, коÑоÑÑе Ð²Ñ Ñ
оÑиÑе вÑзваÑÑ, назÑваÑÑÑÑ greeting()
, но Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð´Ð¾ÑÑÑп ÑолÑко к ÑÑнкÑии greeting()
Ñайла first.js
(ÑÑнкÑÐ¸Ñ Ñайла second.js
игноÑиÑÑеÑÑÑ). ÐÑоме Ñого, попÑÑка обÑÑвиÑÑ Ð¿ÐµÑеменнÑÑ name
вÑоÑой Ñаз ÑеÑез let
в Ñайле second.js
пÑиведÑÑ Ðº оÑибке.
ÐÑимеÑание: ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑвидеÑÑ Ð² Ñежиме Live на GitHub (Ñм. Ñакже иÑÑ Ð¾Ð´Ð½Ñй код).
Ð¥Ñанение ÑаÑÑей ваÑего кода, заблокиÑованнÑÑ ÑÑнкÑиÑми, позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÐ°ÐºÐ¸Ñ Ð¿Ñоблем и ÑÑиÑаеÑÑÑ Ð½Ð°Ð¸Ð»ÑÑÑей пÑакÑикой.
ÐÑо немного Ð¿Ð¾Ñ Ð¾Ð¶Ðµ на зоопаÑк. ÐÑвÑ, зебÑÑ, ÑигÑÑ Ð¸ Ð¿Ð¸Ð½Ð³Ð²Ð¸Ð½Ñ Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð² ÑÐ²Ð¾Ð¸Ñ ÑобÑÑвеннÑÑ Ð¾Ð³ÑаждениÑÑ Ð¸ имеÑÑ Ð´Ð¾ÑÑÑп ÑолÑко к веÑам внÑÑÑи Ð¸Ñ Ð²Ð¾Ð»ÑеÑов - Ñаким же обÑазом, как и в облаÑÑи ÑÑнкÑий. ÐÑли Ð±Ñ Ð¾Ð½Ð¸ Ñмогли попаÑÑÑ Ð² дÑÑгие волÑеÑÑ, возникли пÑоблемÑ. РлÑÑÑем ÑлÑÑае ÑазнÑе живоÑнÑе бÑдÑÑ ÑÑвÑÑвоваÑÑ ÑÐµÐ±Ñ Ð½ÐµÑдобно в незнакомÑÑ Ð¼ÐµÑÑÐ°Ñ Ð¾Ð±Ð¸ÑÐ°Ð½Ð¸Ñ - лев или ÑÐ¸Ð³Ñ Ð±ÑдÑÑ ÑÑвÑÑвоваÑÑ ÑÐµÐ±Ñ ÑжаÑно внÑÑÑи водÑниÑÑой, ледÑной облаÑÑи пингвинов. Ð Ñ ÑдÑем ÑлÑÑае лÑÐ²Ñ Ð¸ ÑигÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑеÑÑÑ Ð¿Ð¸Ð½Ð³Ð²Ð¸Ð½Ð¾Ð²!
Ð¥ÑаниÑÐµÐ»Ñ Ð·Ð¾Ð¾Ð¿Ð°Ñка подобен глобалÑной пеÑеменной - он или она Ð¸Ð¼ÐµÐµÑ ÐºÐ»ÑÑи Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð²Ð¾Ð»ÑеÑÑ, Ð´Ð»Ñ Ð¿Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð°Ñов пиÑи, ÑÑ Ð¾Ð´Ð° за болÑнÑми живоÑнÑми и Ñ. д.
ÐкÑивное обÑÑение: игÑа Ñ scopeÐавайÑе поÑмоÑÑим на ÑеалÑнÑй пÑимеÑ, демонÑÑÑиÑÑÑÑий обзоÑ.
СнаÑала ÑоздайÑе локалÑнÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ð°Ñего пÑимеÑа function-scope.html. ÐÑо ÑодеÑÐ¶Ð¸Ñ Ð´Ð²Ðµ ÑÑнкÑии, назÑваемÑе a()
и b()
, и ÑÑи пеÑеменнÑе - x
, y
и z
- две из коÑоÑÑÑ
опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð²Ð½ÑÑÑи ÑÑнкÑий и одна в глобалÑной облаÑÑи. Ðн Ñакже ÑодеÑÐ¶Ð¸Ñ ÑÑеÑÑÑ ÑÑнкÑиÑ, назÑваемÑÑ output()
, коÑоÑÐ°Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð´Ð¸Ð½ паÑамеÑÑ Ð¸ вÑÐ²Ð¾Ð´Ð¸Ñ ÐµÐ³Ð¾ в абзаÑе на ÑÑÑаниÑе.
ÐÑкÑойÑе пÑÐ¸Ð¼ÐµÑ Ð² бÑаÑзеÑе и в ÑекÑÑовом ÑедакÑоÑе.
ÐÑкÑойÑе конÑÐ¾Ð»Ñ JavaScript в инÑÑÑÑменÑÐ°Ñ ÑазÑабоÑÑика ваÑего бÑаÑзеÑа. РконÑоли JavaScript введиÑе ÑледÑÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ:
Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвидеÑÑ Ð·Ð½Ð°Ñение пеÑеменной x
вÑвод на ÑкÑане.
ТепеÑÑ Ð¿Ð¾Ð¿ÑобÑйÑе ввеÑÑи ÑледÑÑÑее в конÑоли
Ðба из ниÑ
Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð² ÑÑÑоке "ReferenceError: y is not defined". ÐоÑÐµÐ¼Ñ ÑÑо? Ðз-за ÑÑнкÑии scope - y
и z
блокиÑÑÑÑÑÑ Ð²Ð½ÑÑÑи ÑÑнкÑий a()
и b()
, поÑÑÐ¾Ð¼Ñ output()
не Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ðº ним доÑÑÑп пÑи вÑзове из глобалÑной облаÑÑи.
Ðднако как наÑÑÑÑ Ñого, когда он вÑзван изнÑÑÑи дÑÑгой ÑÑнкÑии? ÐопÑобÑйÑе оÑÑедакÑиÑоваÑÑ ÑÑнкÑии a()
и b()
, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ вÑглÑдели ÑледÑÑÑим обÑазом:
function a() {
var y = 2;
output(y);
}
function b() {
var z = 3;
output(z);
}
СоÑ
ÑаниÑе код и пеÑезагÑÑзиÑе его в ÑвоÑм бÑаÑзеÑе, заÑем попÑобÑйÑе вÑзваÑÑ ÑÑнкÑии a()
и b()
из конÑоли JavaScript:
Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвидеÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ y и z, вÑводимÑе на ÑÑÑаниÑе. ÐÑо оÑлиÑно ÑабоÑаеÑ, Ñак как ÑÑнкÑÐ¸Ñ output()
вÑзÑваеÑÑÑ Ð²Ð½ÑÑÑи дÑÑгиÑ
ÑÑнкÑий - в Ñой же облаÑÑи, где пеÑеменнÑе, коÑоÑÑе она пеÑаÑаеÑ, опÑеделÑÑÑÑÑ Ð² каждом ÑлÑÑае. output()
доÑÑÑпен из лÑбого меÑÑа, поÑколÑÐºÑ Ð¾Ð½ опÑеделÑн в глобалÑной облаÑÑи.
ТепеÑÑ Ð¿Ð¾Ð¿ÑобÑйÑе обновиÑÑ Ñвой код ÑледÑÑÑим обÑазом:
function a() {
var y = 2;
output(x);
}
function b() {
var z = 3;
output(x);
}
Ð¡Ð¾Ñ ÑаниÑе и пеÑезагÑÑзиÑе Ñнова и повÑоÑиÑе попÑÑÐºÑ Ð² конÑоли JavaScript:
Ðба вÑзова a()
и b()
Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑводиÑÑ Ð·Ð½Ð°Ñение x - 1. Ðни ÑабоÑаÑÑ Ð½Ð¾ÑмалÑно, поÑÐ¾Ð¼Ñ ÑÑо, Ñ
оÑÑ Ð²ÑÐ·Ð¾Ð²Ñ output()
не наÑ
одÑÑÑÑ Ð² Ñой же облаÑÑи, где опÑеделено x
, x
- глобалÑÐ½Ð°Ñ Ð¿ÐµÑеменнаÑ, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð° доÑÑÑпна внÑÑÑи вÑего кода, везде
ÐаконеÑ, попÑобÑйÑе обновиÑÑ Ñвой код ÑледÑÑÑим обÑазом:
function a() {
var y = 2;
output(z);
}
function b() {
var z = 3;
output(y);
}
Ð¡Ð¾Ñ ÑаниÑе и пеÑезагÑÑзиÑе Ñнова и повÑоÑиÑе попÑÑÐºÑ Ð² конÑоли JavaScript:
Ðа ÑÑÐ¾Ñ Ñаз вÑÐ·Ð¾Ð²Ñ a()
и b()
возвÑаÑÑÑ ÑÑÑ ÑаздÑажаÑÑÑÑ Ð¾ÑÐ¸Ð±ÐºÑ "ReferenceError: z is not defined" - ÑÑо поÑомÑ, ÑÑо вÑÐ·Ð¾Ð²Ñ output()
и пеÑеменнÑе, коÑоÑÑе они пÑÑаÑÑÑÑ ÑаÑпеÑаÑаÑÑ, не опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð²Ð½ÑÑÑи одниÑ
и ÑеÑ
же облаÑÑей ÑÑнкÑий - пеÑеменнÑе ÑÑÑекÑивно Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñ Ð´Ð»Ñ ÑÑиÑ
вÑзовов ÑÑнкÑий.
ÐÑимеÑание: Те же пÑавила опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ðµ пÑименÑÑÑÑÑ Ðº ÑÐ¸ÐºÐ»Ñ (напÑимеÑ, for() { ... }
) и ÑÑловнÑм блокам (напÑимеÑ, if() { ... }
) - они вÑглÑдÑÑ Ð¾ÑÐµÐ½Ñ Ð¿Ð¾Ñ
ожими, но ÑÑо не одно и Ñо же! СÑаÑайÑеÑÑ Ð½Ðµ пÑÑаÑÑ Ð¸Ñ
.
ÐÑимеÑание: ReferenceError: "x" is not defined. ÐÑибка - ÑÑо одна из наиболее ÑаÑпÑоÑÑÑанÑннÑÑ Ð¿Ñоблем, Ñ ÐºÐ¾ÑоÑой Ð²Ñ ÑÑолкнÑÑеÑÑ. ÐÑли Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе ÑÑÑ Ð¾ÑибкÑ, и Ð²Ñ ÑвеÑенÑ, ÑÑо опÑеделили ÑÑÑ Ð¿ÐµÑеменнÑÑ, пÑовеÑÑÑе, в какой облаÑÑи она Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ.
ФÑнкÑии внÑÑÑи ÑÑнкÑийÐмейÑе в видÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑзÑваÑÑ ÑÑнкÑÐ¸Ñ Ð¸Ð· лÑбого меÑÑа, даже еÑли она внÑÑÑи дÑÑгой ÑÑнкÑии. ÐÑо ÑаÑÑо иÑполÑзÑеÑÑÑ ÐºÐ°Ðº ÑпоÑоб поддеÑÐ¶Ð°Ð½Ð¸Ñ ÑиÑÑоÑÑ ÐºÐ¾Ð´Ð°. ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð±Ð¾Ð»ÑÑÐ°Ñ ÑÐ»Ð¾Ð¶Ð½Ð°Ñ ÑÑнкÑиÑ, ÐµÑ Ð»ÐµÐ³Ñе понÑÑÑ, еÑли ÑазбиÑÑ ÐµÑ Ð½Ð° неÑколÑко подÑÑнкÑий:
function myBigFunction() {
var myValue;
subFunction1();
subFunction2();
subFunction3();
}
function subFunction1() {
console.log(myValue);
}
function subFunction2() {
console.log(myValue);
}
function subFunction3() {
console.log(myValue);
}
ÐÑоÑÑо ÑбедиÑеÑÑ, ÑÑо знаÑениÑ, иÑполÑзÑемÑе внÑÑÑи ÑÑнкÑии, наÑ
одÑÑÑÑ Ð² облаÑÑи видимоÑÑи. РпÑиведÑнном вÑÑе пÑимеÑе вÑдаÑÑÑÑ Ð¾Ñибка ReferenceError: MyValue is not defined
, поÑколÑÐºÑ Ñ
оÑÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ myValue
опÑеделена в Ñой же облаÑÑи, ÑÑо и вÑÐ·Ð¾Ð²Ñ ÑÑнкÑий, она не опÑеделена в опÑеделениÑÑ
ÑÑнкÑий - ÑакÑиÑеÑкий код, коÑоÑÑй запÑÑкаеÑÑÑ Ð¿Ñи вÑзове ÑÑнкÑий. ЧÑÐ¾Ð±Ñ ÑÑо ÑабоÑало, вам нÑжно пеÑедаÑÑ Ð·Ð½Ð°Ñение в ÑÑнкÑÐ¸Ñ Ð² каÑеÑÑве паÑамеÑÑа, напÑÐ¸Ð¼ÐµÑ Ñак:
function myBigFunction() {
var myValue = 1;
subFunction1(myValue);
subFunction2(myValue);
subFunction3(myValue);
}
function subFunction1(value) {
console.log(value);
}
function subFunction2(value) {
console.log(value);
}
function subFunction3(value) {
console.log(value);
}
ÐаклÑÑение
Ð ÑÑой ÑÑаÑÑе бÑли ÑаÑÑмоÑÑÐµÐ½Ñ Ð¾ÑновнÑе понÑÑиÑ, лежаÑие в оÑнове ÑÑнкÑий, позволÑÑÑие оÑвоиÑÑ ÑледÑÑÑий маÑеÑиал, в коÑоÑом Ð¼Ñ Ð¿Ð¾Ð»ÑÑим пÑакÑиÑеÑкие навÑки, и наÑÑимÑÑ ÑоздаваÑÑ ÑобÑÑвеннÑе ÑÑнкÑии.
СмоÑÑиÑе ÑакжеRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4