создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

Урок 10. Пользовательские функции в JavaScript

Содержание

Теория

Вы уже знаете многие стандартные функции JavaScript, например substr(), reverse(), split(). Их использование очень удобно, чтобы написать свои аналоги на JavaScript, потребовалось бы много времени и сил.

Однако, с помощью стандартных функций невозможно сделать все, что требуется. На помощь приходит такой механизм JavaScript, как функции пользователя. С их помощью можно создавать свои функции, принцип работы которых аналогичен стандартным функциям JavaScript.

Зачем нужны пользовательские функции?

Очень часто при программировании возникает такая ситуация: некоторые участки кода повторяются несколько раз в разных местах. Пользовательские Функции нужны для того, чтобы убрать дублирование кода.

Дублирование плохо тем, что если требуется что-то поменять в коде, это придется сделать во многих местах.

Кроме того, функции скрывают внутри себя какой-то код, о котором не приходится задумываться. Например, есть функция s(), которая сохраняет пользователя в базу данных. Можно просто вызывать ее, не задумываясь о том, какой код выполняется внутри функции. Это удобно. В программировании это называется инкапсуляцией.

Синтаксис функций пользователя

Функция создается с помощью команды function. Далее через пробел следует имя функции и круглые скобки. Круглые скобки могут быть пустыми, либо в них могут быть указаны параметры, которые принимает функция. Параметры - это обычные переменные JavaScript.

Сколько может быть параметров: 1, несколько (в этом случае они указываются через запятую), ни 1 (в этом случае круглые скобки все-равно нужны).

//f - это имя функции, ей передается 1 параметр p:

function f(p){}

//Передаем функции 2 параметра - p и q:

function f(p,q){}

//Вообще не передаем никаких параметров:

function f(){}

Обратите внимание на фигурные скобки в примерах: в них пишется код, который выполняет функция. Общий синтаксис функции выглядит так:

function имя_функции(здесь перечисляются параметры через запятую){Здесь написаны команды, которые выполняет функция}

Как вызвать функцию в коде?

Саму функцию можно вызвать в любом месте страницы (даже до ее определения). Функция вызывается по ее имени. При этом круглые скобки после ее имени обязательны, даже если они пустые.

Пример:

/*Пишем функцию, которая выводит на экран 'Привет, мир'. Назовем ее 'h':*/

function h(){

/*В этом месте ничего не выведется само по себе, а выведется только при вызове функции*/document.write('Привет, мир')}

/*Теперь вызываем функцию, чтобы она вывела фразу. Обратимся к функции по имени:*/

h();/*Функция выведет 'Привет, мир'. Можно вывести фразу несколько раз. Для этого достаточно написать функцию не 1 раз, а несколько*/h();h();h()

Подробнее о параметрах

В наших примерах вызывалась функция 'h()' без параметров.

Теперь вводится параметр, который будет задавать текст, выводимый функцией:

function h(t/*укажем здесь параметр t*/){/*Выведем значение переменной t*/document.write(t)};/*Теперь вызывается функция*/h('Привет, Земляне')/*она выведет именно ту фразу, которую ей передали*/

Сократим код:

function h(t){document.write(t)};h('Привет, Земляне')

Обратите внимание на переменную t в функции: в ней появляется то, что передается в круглых скобках при вызове функции.

Как JavaScript знает, что текст 'Привет, Земляне' нужно положить в переменную t? Мы сказали ему об этом, когда создавали нашу функцию, вот тут: 'function h(t)'.

Если задать несколько параметров, то каждый из них будет лежать в своей переменной внутри функции.

Инструкция return

Чаще всего функция должна не выводить что-то через document.write, а возвращать.

Сделаем так, чтобы функция не выводила что-то, а возвращала текст скрипту, чтобы он смог записать этот текст в переменную и как-то обработать его дальше:

Зададим функцию:

function h(t){/*С помощью инструкции 'return' укажем функции, что мы хотим, чтобы она вернула текст, а не вывела на экран*/return t}/*Теперь вызовем нашу функцию и запишем значение в переменную m*/var m=h('Привет, Земляне');/*Теперь в переменной m лежит 'Привет, Земляне'*/document.write(m);/*Убедимся в этом. Можно не вводить промежуточную переменную m, а сделать так:*/document.write(h('Привет, Земляне'))

Сократим код:

function h(t){return t}var m=h('Привет, Земляне');document.write(m);document.write(h('Привет, Земляне'))

function h(t){return t}document.write(h('Привет, Земляне'))

В принципе, практической пользы от этого никакой, т.к. функция вернула то, что ей передали. Модернизируем пример так, чтобы функция принимала имя человека, а выводила строку 'Привет, %имя_человека_переданное_функции%':

Зададим функцию:

ПРОВЕРЬ!

function h(n){/*укажем здесь параметр n, в котором будет лежать имя человека. Введем переменную t, в которую запишем всю фразу:*/t='Привет, '.n;/*Укажем функции с помощью инструкции 'return', что хотим, чтобы она ВЕРНУЛА содержимое переменной t:*/return t}/*Теперь вызовем нашу функцию и запишем значение в переменную m:*/m=h('Иван');/*Теперь в переменной t лежит 'Привет, Иван'*/document.write(m);/*Убедимся в этом. Поздороваемся сразу с группой людей из 3 человек*/document.write(h('Вася').'. '.h('Петя').'. '.h('Коля'))

Сократим код:

function h(n){t='Привет, '.n;return t};m=h('Иван');document.write(m,h('Вася').'. '.h('Петя').'. '.h('Коля'))

Частая ошибка с return

После того, как выполнится инструкция return, функция закончит свою работу. Т.е. после выполнения return больше никакой код не выполнится.

Это не значит, что в функции должен быть 1 return. Но выполнится только 1 из них. Такое поведение функций является причиной многочисленных трудноуловимых ошибок.

Пример:
ПРОВЕРЬ!

function f(p){/*Если переменная p имеет значение true, то вернем 'Верно'. Напоминаю о том, что конструкция if(p) эквивалентна if(p===true)!*/if(p)return 'Верно';/*Далее проделаем еще какие-то операции, но, если переменная p имеет значение true, сработает инструкция return, и код ниже работать не будет! Напротив, если p===false, инструкция return не выполнится и код дальше будет работать!*/document.write('Привет, мир')}

Сократим код:

function f(p){if(p)return'Верно';document.write('Привет, мир')}

Приемы работы с return
ПРОВЕРЬ!

Существуют некоторые приемы работы с return, упрощающие код. Как сделать проще:

function f(p){/*Что делает код: если param имеет значение true, то в переменную r пишем 'Верно', иначе 'Неверно':*/if(p){r='Верно'}else{r='Неверно'}/*Вернем содержимое переменной r:*/return r}

Сократим код:

function f(p){if(p){r='Верно'}else{r='Неверно'}return r}

Теперь упростим функцию, используя прием работы с return:

ПРОВЕРЬ!

function f(p){/*Что делает код: если param имеет значение true, вернет 'Верно', иначе вернет 'Неверно'*/if(p){return'Верно'}else{return'Неверно'}}

Сократим код:

function f(p){if(p){return'Верно'}else{return'Неверно'}}

Обратите внимание, как упростился код. Плюс - убрана лишняя переменная r.

Практика

Примеры решения задач

Задача

Сделать функцию, которая возвращает куб числа. Число передается параметром.

Решение:

function a($n){return $n*$n*$n};document.write(a(2))

Задачи для решения

Простые функции

Сделать функцию, которая возвращает квадрат числа. Число передается параметром.

Сделать функцию, которая возвращает сумму 2 чисел.

Сделать функцию, которая отнимает от 1-го числа 2-е и делит на 3-е.

Сделать функцию, которая принимает параметром число от 1 до 7, а возвращает день недели на русском языке.

Содержание

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting