ÐÐ»Ñ Ð½Ð°Ñ Ð² ÑÑом кÑÑÑе имееÑÑÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ важнÑй моменÑ. ÐоÑмоÑÑим внимаÑелÑнее на возвÑаÑаемое знаÑение ÑÑнкÑий. ÐекоÑоÑÑе ÑÑнкÑии не возвÑаÑаÑÑ ÑÑÑеÑÑвенное знаÑение поÑле завеÑÑениÑ, но некоÑоÑÑе возвÑаÑаÑÑ, и важно понимаÑÑ ÑÑо ÑÑо за знаÑение и как иÑполÑзоваÑÑ ÐµÐ³Ð¾ в ÑвоÑм коде и как ÑделаÑÑ Ñак ÑÑÐ¾Ð±Ñ Ð²Ð°Ñи ÑобÑÑвеннÑе ÑÑнкÑии возвÑаÑали полезнÑе знаÑениÑ. ÐÑ Ð¾Ð±ÑÑÑним вÑÑ ÑÑо ниже.
ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе навÑки: ÐÐ°Ð·Ð¾Ð²Ð°Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑÐ½Ð°Ñ Ð³ÑамоÑноÑÑÑ, знание оÑнов HTML и CSS, JavaScript first steps, Functions â reusable blocks of code. Цели: ÐонÑÑÑ ÑÑо Ñакое возвÑаÑаемое знаÑение ÑÑнкÑии и как его иÑполÑзоваÑÑ. ЧÑо из ÑÐµÐ±Ñ Ð¿ÑедÑÑавлÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемÑе знаÑениÑ?ÐозвÑаÑаемÑе знаÑÐµÐ½Ð¸Ñ - ÑÑо на Ñамом деле пÑоÑÑо знаÑениÑ, коÑоÑÑе ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¿Ð¾Ñле Ñвоего завеÑÑениÑ. ÐÑ Ñже неоднокÑаÑно вÑÑÑеÑали возвÑаÑаемÑе знаÑениÑ, Ñ Ð¾ÑÑ, возможно, и не оÑознавали ÑÑого. ÐапиÑем неболÑÑой код:
var myText = "I am a string";
var newString = myText.replace("string", "sausage");
console.log(newString);
// ÑÑнкÑÐ¸Ñ replace() пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑокÑ,
// заменÑÐµÑ Ð¾Ð´Ð½Ñ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ð´ÑÑгой и возвÑаÑаеÑ
// новÑÑ ÑÑÑÐ¾ÐºÑ Ñо ÑделаннÑми заменами
ÐÑ Ñже видели ÑÑÐ¾Ñ Ð±Ð»Ð¾Ðº кода в наÑей пеÑвой ÑÑаÑÑе пÑо ÑÑнкÑии. ÐÑ Ð²ÑзÑваем ÑÑнкÑÐ¸Ñ replace() на ÑÑÑоке myText
и пеÑедаÑм ей 2 паÑамеÑÑа â заменÑемÑÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ð¸ подÑÑÑокÑ, коÑоÑой бÑдем заменÑÑÑ. Ðогда ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑÐ¸Ñ Ð²Ñполнение, она веÑнÑÑ Ð·Ð½Ð°Ñение, коÑоÑÑм ÑвлÑеÑÑÑ Ð½Ð¾Ð²Ð°Ñ ÑÑÑока Ñо ÑделаннÑми в ней заменами. Ркоде вÑÑе Ð¼Ñ ÑоÑ
ÑанÑем ÑÑо возвÑаÑаемое знаÑение как знаÑение пеÑеменной newString
.
ÐÑли Ð²Ñ Ð¿Ð¾ÑмоÑÑиÑе на ÑÑнкÑÐ¸Ñ replace() на MDN reference page, Ð²Ñ ÑвидиÑе ÑекÑÐ¸Ñ Ð¿Ð¾Ð´ названием Return value. ÐÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ знаÑÑ Ð¸ понимаÑÑ ÐºÐ°ÐºÐ¸Ðµ знаÑÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ ÑÑнкÑиÑми, Ñак ÑÑо Ð¼Ñ Ð¿ÑÑаемÑÑ Ð²ÐºÐ»ÑÑаÑÑ ÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð²ÐµÐ·Ð´Ðµ, где ÑÑо возможно.
ÐекоÑоÑÑе ÑÑнкÑии не возвÑаÑаÑÑ Ð·Ð½Ð°ÑениÑ( на наÑиÑ
reference pages, возвÑаÑаемое знаÑение обознаÑено как void
или undefined
в ÑакиÑ
ÑлÑÑаÑÑ
). ÐапÑимеÑ, в ÑÑнкÑии displayMessage() коÑоÑÑÑ Ð¼Ñ Ñделали в пÑоÑлой ÑÑаÑÑе, в ÑезÑлÑÑаÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑнкÑии не возвÑаÑаеÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð³Ð¾ знаÑениÑ. ФÑнкÑÐ¸Ñ Ð²Ñего лиÑÑ Ð¾ÑобÑÐ°Ð¶Ð°ÐµÑ ÑÑо-Ñо где-Ñо на ÑкÑане.
РоÑновном, возвÑаÑаемое знаÑение иÑполÑзÑеÑÑÑ Ñам, где ÑÑнкÑÐ¸Ñ ÑвлÑеÑÑÑ Ñем-Ñо вÑоде вÑпомогаÑелÑного звена пÑи вÑÑиÑлениÑÑ . ÐÑ Ñ Ð¾ÑиÑе полÑÑиÑÑ ÑезÑлÑÑаÑ, коÑоÑÑй вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ð½ÐµÐºÐ¾ÑоÑÑе знаÑениÑ. ÐÑи знаÑÐµÐ½Ð¸Ñ Ð²ÑÑиÑлÑÑÑÑÑ ÑÑнкÑией, коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ñак, ÑÑо он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзован в ÑледÑÑÑÐ¸Ñ ÑÑадиÑÑ Ð²ÑÑиÑлениÑ.
ÐÑполÑзование возвÑаÑаемÑÑ Ð·Ð½Ð°Ñений в ваÑÐ¸Ñ ÑобÑÑвеннÑÑ ÑÑнкÑиÑÑЧÑÐ¾Ð±Ñ Ð²ÐµÑнÑÑÑ Ð·Ð½Ð°Ñение Ñвоей ÑÑнкÑии, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ ÐºÐ»ÑÑевое Ñлово return. ÐÑ Ð²Ð¸Ð´ÐµÐ»Ð¸ ÑÑо в дейÑÑвии недавно - в наÑем пÑимеÑе random-canvas-circles.html. ÐаÑа ÑÑнкÑÐ¸Ñ draw()
оÑÑиÑовÑÐ²Ð°ÐµÑ Ð³Ð´Ðµ-Ñо на ÑкÑане 100 ÑлÑÑайнÑÑ
кÑÑжков.
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();
}
}
ÐнÑÑÑи каждой иÑеÑаÑии еÑÑÑ 3 вÑзова ÑÑнкÑии random()
. ÐÑо Ñделано ÑÑÐ¾Ð±Ñ ÑгенеÑиÑоваÑÑ ÑлÑÑайное знаÑение Ð´Ð»Ñ ÑекÑÑей кооÑдинаÑÑ x, y и Ð´Ð»Ñ ÑадиÑÑа. ФÑнкÑÐ¸Ñ random()
пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ 1 паÑамеÑÑ (Ñелое ÑиÑло) и возвÑаÑÐ°ÐµÑ ÑлÑÑайное ÑиÑло в диапазоне Ð¾Ñ 0 до ÑÑого ÑиÑла. ÐÑглÑÐ´Ð¸Ñ ÑÑо Ð²Ð¾Ñ Ñак:
function random(number) {
return Math.floor(Math.random() * number);
}
Тоже Ñамое Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°Ð¿Ð¸Ñано Ð²Ð¾Ñ Ñак:
function random(number) {
var result = Math.floor(Math.random() * number);
return result;
}
Ðо пеÑвÑÑ Ð²ÐµÑÑÐ¸Ñ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ð±ÑÑÑÑее и она более компакÑна.
ÐÑ Ð²Ð¾Ð·Ð²ÑаÑаем ÑезÑлÑÑÐ°Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Math.floor(Math.random()*number)
каждÑй Ñаз когда ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ. ÐÑо возвÑаÑаемое знаÑение поÑвлÑеÑÑÑ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñзова ÑÑнкÑии и код пÑодолжаеÑÑÑ. Так, напÑимеÑ, еÑли Ð¼Ñ Ð²Ñполним ÑледÑÑÑÑÑ ÑÑÑоÑкÑ:
ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
и 3 вÑзова random()
веÑнÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ 500, 200 и 35, ÑооÑвеÑÑÑвенно, ÑÑÑоÑка бÑÐ´ÐµÑ Ð²Ñполнена как еÑли Ð±Ñ Ð¾Ð½Ð° бÑла Ñакой:
ctx.arc(500, 200, 35, 0, 2 * Math.PI);
СнаÑала вÑполнÑÑÑÑÑ Ð²ÑÐ·Ð¾Ð²Ñ ÑÑнкÑии random()
, на меÑÑо коÑоÑÑÑ
подÑÑавлÑÑÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемÑе ей знаÑениÑ, а заÑем вÑполнÑÑÑÑ Ñама ÑÑÑока.
ТепеÑÑ Ð½Ð°Ð¿Ð¸Ñем наÑÑ ÑобÑÑвеннÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ Ð·Ð½Ð°Ñение ÑÑнкÑиÑ.
ÐеÑвÑм делом, ÑделайÑе локалÑнÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ñайла function-library.html из GitHub. ÐÑо пÑоÑÑÐ°Ñ HTML ÑÑÑаниÑка, ÑодеÑжаÑÐ°Ñ ÑекÑÑовое поле <input>
и паÑагÑÐ°Ñ Ð¢Ð°ÐºÐ¶Ðµ Ñам еÑÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ <script>
в коÑоÑом Ð¼Ñ Ñ
Ñаним в 2ÑÑ
пеÑеменнÑÑ
ÑÑÑлки на оба HTML-ÑлеменÑа. ÐÑо маленÑÐºÐ°Ñ ÑÑÑаниÑка Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð²Ð°Ð¼ ввеÑÑи ÑиÑло в text box и оÑобÑÐ°Ð·Ð¸Ñ ÑазлиÑнÑе, оÑноÑÑÑиеÑÑ Ðº Ð½ÐµÐ¼Ñ ÑиÑла в паÑагÑаÑе ниже.
ТепеÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ неÑколÑко полезнÑÑ
ÑÑнкÑий в ÑÐ»ÐµÐ¼ÐµÐ½Ñ <script>
. Ðиже двÑÑ
ÑÑÑеÑÑвÑÑÑиÑ
ÑÑÑоÑек JavaScript, добавÑÑе ÑледÑÑÑие опиÑÐ°Ð½Ð¸Ñ ÑÑнкÑий:
function squared(num) {
return num * num;
}
function cubed(num) {
return num * num * num;
}
function factorial(num) {
var x = num;
while (x > 1) {
num *= x - 1;
x--;
}
return num;
}
Ф
ÑÑнкÑии squared()
и cubed()
доволÑно оÑевиднÑâ они возвÑаÑаÑÑ ÐºÐ²Ð°Ð´ÑÐ°Ñ Ð¸Ð»Ð¸ кÑб пеÑеданного как паÑамеÑÑ ÑиÑла. ФÑнкÑÐ¸Ñ factorial()
возвÑаÑÐ°ÐµÑ factorial пеÑеданного ÑиÑла.
Ðалее Ð¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ ÑпоÑоб вÑводиÑÑ Ð½Ð°ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð²Ð²ÐµÐ´ÑннÑм в text input ÑиÑле. ÐобавÑÑе обÑабоÑÑик ÑобÑÑий ниже ÑÑÑеÑÑвÑÑÑÐ¸Ñ ÑÑнкÑий:
input.onchange = function () {
var num = input.value;
if (isNaN(num)) {
para.textContent = "You need to enter a number!";
} else {
para.textContent =
num +
" squared is " +
squared(num) +
". " +
num +
" cubed is " +
cubed(num) +
". " +
num +
" factorial is " +
factorial(num) +
".";
}
};
ÐдеÑÑ Ð¼Ñ ÑоздаÑм обÑабоÑÑик ÑобÑÑий onchange
коÑоÑÑй ÑÑабаÑÑÐ²Ð°ÐµÑ ÐºÐ¾Ð³Ð´Ð° менÑеÑÑÑ ÐºÐ¾Ð³Ð´Ð° новое знаÑение вводиÑÑÑ Ð² text input и подÑвеÑждаеÑÑÑ (введиÑе знаÑение и, напÑимеÑ, нажмиÑе tab). Ðогда Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ ÑÑабаÑÑваеÑ, введÑнное в input знаÑение ÑоÑ
ÑанÑеÑÑÑ Ð² пеÑеменной num
.
Ðалее Ð¼Ñ Ð´ÐµÐ»Ð°ÐµÐ¼ ÑÑловнÑй ÑеÑÑ â еÑли введÑнное знаÑение не ÑвлÑеÑÑÑ ÑиÑлом, Ð¼Ñ Ð²Ñводим в паÑагÑÐ°Ñ ÑообÑение об оÑибке. ТеÑÑ ÑмоÑÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð»Ð¸ вÑÑажение isNaN(num)
true. ÐÑ Ð¸ÑполÑзÑем ÑÑнкÑÐ¸Ñ isNaN() ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ ÑÑо знаÑение пеÑеменной num не ÑиÑло â еÑли Ñак Ñо ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ true
, еÑли неÑ- false
.
ÐÑли ÑеÑÑ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ false
, знаÑение пеÑеменной num
ÑиÑло, и поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð²Ñводим ÑообÑение внÑÑÑи паÑагÑаÑа о знаÑениÑÑ
квадÑаÑа, кÑба и ÑакÑоÑиала ÑиÑла. ÐÑедложение вÑзÑÐ²Ð°ÐµÑ ÑÑнкÑии squared()
, cubed()
и factorial()
ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð½ÑжнÑе знаÑениÑ. СоÑ
ÑаниÑе Ð²Ð°Ñ ÐºÐ¾Ð´, загÑÑзиÑе его в бÑаÑзеÑе и поÑмоÑÑиÑе на Ñо ÑÑо полÑÑилоÑÑ.
ÐÑимеÑание: ÐÑли Ñ Ð²Ð°Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÑабоÑой данного пÑимеÑа, не ÑÑеÑнÑйÑеÑÑ ÑвеÑиÑÑ Ð²Ð°Ñ ÐºÐ¾Ð´ Ñ ÑабоÑаÑÑей веÑÑией (или ÑмоÑÑиÑе живой пÑимеÑ), или ÑпÑоÑиÑе наÑ.
Ð ÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Ð¼Ñ Ñ
оÑели Ð±Ñ ÑÑÐ¾Ð±Ñ Ð²Ñ Ð½Ð°Ð¿Ð¸Ñали паÑоÑÐºÑ ÑобÑÑвеннÑÑ
ÑÑнкÑий и добавили иÑ
в библиоÑекÑ. Ðак на ÑÑÑÑ ÐºÐ²Ð°Ð´ÑаÑного или кÑбиÑеÑкого коÑÐ½Ñ ÑиÑла или Ð´Ð»Ð¸Ð½Ñ Ð¾ÐºÑÑжноÑÑи кÑÑга Ñ Ð´Ð»Ð¸Ð½Ð¾Ð¹ ÑадиÑÑа Ñавной ÑиÑÐ»Ñ num
?
ÐÑо ÑпÑажнение пÑивнеÑло паÑоÑÐºÑ Ð²Ð°Ð¶Ð½ÑÑ
понÑÑий в изÑÑении Ñого, как иÑполÑзоваÑÑ ÐºÐ»ÑÑевое Ñлово return
. Рдополнение:
ФÑнкÑии оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð¸ неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо об Ð¸Ñ ÑинÑакÑиÑе и ÑÑнкÑионалÑноÑÑи можно говоÑиÑÑ Ð´Ð¾Ð»Ð³Ð¾, Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно понÑÑнÑе ÑÑаÑÑи Ð´Ð»Ñ Ð´Ð°Ð»ÑнейÑего обÑÑениÑ.
ÐÑли в ÑÑаÑÑе еÑÑÑ ÑÑо-Ñо ÑÑо Ð²Ñ Ð½Ðµ понÑли, не ÑÑеÑнÑйÑеÑÑ Ð¿ÐµÑеÑиÑаÑÑ ÑÑаÑÑÑ ÐµÑÑ Ñаз или ÑвÑжиÑеÑÑ Ñ Ð½Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼Ð¾Ñи.
СмоÑÑиÑе Ñакже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