Создание функций в JavaScript
Как создать функцию в JavaScript? Такой вопрос достаточно распространён среди начинающих программистов. И эта статья написана как раз для таких новичков. Для начала необходимо разобраться с вопросом: а что такое функция? Давайте с этого и начнём.
Вы должны помнить из школы, что такое функция. Если нет, то напоминаю. У функции есть определённые параметры, которыми она манипулирует, и возвращает результат. Например, функция y = 2 * x +5. Здесь мы можем задать x = 3, а в ответ получим y = 11. Вот это пример функции из математики. Абсолютно аналогичные функции и в JavaScript, только тут функцией может быть не просто какое-то вычисление какого-то выражения, а всё, что угодно.
Давайте для начала создадим функцию, которая 3 раза выводит сообщение "Привет".
<script language = "javascript">
function hello() {
alert("Привет");
alert("Привет");
alert("Привет");
}
hello();
</script>
Первая строчка сообщает, что дальше идёт сценарий на языке JavaScript. На следующей строке объявляется функция. Как видите, всё начинается с ключевого слова function. Внутри скобок указываются параметры, но в данном случае параметров нет, поэтому внутри скобок всё пусто. Дальше идут фигурные скобки, внутри которых находится код функции, который должен быть выполнен при её вызове. В качестве этого кода используется функция alert(), которая вызывает информационное окошко, в котором написан текст, заданный параметром. В качестве параметра мы функции alert() (это пример встроенной функции) передаём строку "Привет". Функцию alert() мы вызываем три раза.
Когда функция написана, то необходимо поставить закрывающую фигурную скобку. На следующей строке мы вызываем функцию hello(). Надеюсь, Вам стало понятно, что такое функция. Возможно, что некоторые из Вас спросят: "А какие преимущества? Ведь мы могли бы просто написать три раза alert() и результат был бы тот же". Вы правы, и так и нужно поступать, если Вам нужно использовать этот код всего один раз. А представьте, что Вам это нужно 3, 4 или большее число раз. Разумеется, неудобно писать постоянно этот повторяющийся код. Гораздо проще написать одно слово hello(). Согласны? Думаю, что да. В конце статьи я, исходя из этого, сделаю один очень важный вывод, поэтому дочитайте её до конца.
Теперь поговорим о функциях с параметрами. Давайте создадим один из таких примеров (буду писать сразу функцию и её вызов, без тега <script>).
function sum (x, y) {
var sum = x + y;
document.write(sum);
}
sum(5, 4);
Код достаточно прозрачный, однако, давайте прокомментирую. Опять ключевое слово function, потом название функции (в данном случае, пусть будет sum). Внутри скобок указал два параметра, которые требуются (x и y). Внутри функции я создаю ещё одну переменную sum (это совершенно нормально называть переменные и функции одинаково), которой присваиваю сумму x и y (которые были переданы). И затем вывожу в окно браузера полученный результат. После функции вызываю её, передав параметры 5 и 4. Вы можете проверить, и увидите в окне браузера - 9.
И, напоследок, скажу о возвращаемых значениях. В примере выше мы результат сразу печатали, однако, для данной функции будет наиболее логично ничего не печатать, а возвратить результат. А что дальше с ним делать - это уже другой вопрос. Давайте перепишем функцию так:
function sum(x, y) {
var sum = x + y;
return sum;
}
var z = sum(4, 5) + sum(1,-3);
document.write(z);
Обратите внимание на ключевое слово return. Оно возвращает результат (в нашем случае - сумму двух чисел). Таким образом, sum(4,5) возвращает 9. Это число мы складываем с результатом работы функции sum(1, -3), то есть -2. В итоге мы получим 7. И только потом печатаем результат в браузере.
Надеюсь, Вы оценили возможности функций, поэтому создавать и использовать функции в JavaScript надо обязательно. И сейчас я сделаю один важный вывод, принцип, которому надо всегда следовать: любой повторяющийся код - необходимо выделять в отдельную функцию. Если у Вас 20 раз выводится одинаковые 5 строк (к примеру), то необходимо эти 5 строк выделить в отдельную функцию. Тем самым Вы вместо 100 строк (20 раз * 5 строк), напишите только 20 строк, да ещё и более понятных (название функции - это гораздо проще, чем 5 строк кода). Хочется сказать, что если этому правилу не следовать, то размер программы может увеличиться в десятки, а, может, и в сотни раз.
Советую Вам потренироваться и, например, создать функции всех основных математических операций (сложение, вычитание, умножение и деление).
Дерзайте, и Удачи!
-
- Михаил Русаков
Комментарии (24):
В принципе, всё понятно. Но как и почему в самой последней функции на экран выводится число 9, ведь там нету сроки document.write?
Ответить
После функции document.write(z);
Ответить
Ясно.Спасибо за оперативность.
Ответить
Делаю калькулятор с вводом двух чисел. Все операции (-,*,/) работают нормально, а вот сложение (+) выдаёт результат: "a+b=ab" (например 1+2=12, а не 3). Михаил помоги пожалуйста, что не так, я голову сломал: var a = prompt("Введите первое число:"); var b = prompt("Введите второе число:"); function sum(a,b) { var sum = a + b; document.write(a,'+',b,'=',sum,'</br>'); } sum(a,b);
Ответить
Используйте функцию Number() для преобразования строк в числа.
Ответить
Не получается, где именно её писать? :l
Ответить
a = prompt("..."); a = Number(a);
Ответить
Спасибо!)
Ответить
Насколько я понял alert это тоже функция. Но мы же ее не писали, как мы ее используем? Это вроде глобальная функция которые действуют во всех браузерах по умолчанию? Если я прав, то где можно посмотреть все глобальные функции? Если нет, то что это?
Ответить
Это глобальная функция, она действует везде. Посмотреть можете в справочнике JavaScript.
Ответить
Пытаюсь разобраться с заданием на return (задание JavaScript 4 пункт 3). Под буквой "а" забиваю такой код: var x = prompt ("Введите первое число:"); x = Number(x); var y = prompt ("Введите второе число:"); y = Number(y); var znak = prompt ("Введите тип операции '+ - * /':"); document.write (printAction(x, y, znak)); function printAction(x, y, znak){ return document.write (x + znak + y); } На что, у меня почему то выводит 1+2undefined????? Под буквой "б" - совсем беда, пробую по всякому никаких сдвигов. Может подскажите, где ошибка в "а" и с какого боку подойти в "б"???!!!
Ответить
return document.write - это зачем? Достаточно просто вернуть строку, без document.write.
Ответить
Ура, получилось! Мелочь, а приятно! Спасибо)
Ответить
<html> <head> </head> <body> <script language = "javascript"> function threewrite() { document.write("<br>Hello World"); document.write("<br>Hello World"); document.write("<br>Hello World"); } </script> <script language = "javascript"> function threewrite(); </script> <h1>tyyyy</h1> <script language = "javascript"> function threewrite(); </script> </body> </html> Хотелось бы узнать в чем ошибка почему функция не работает. То есть не отображается в окне браузера. Больно не пинайте, так как я новичок и только пытаюсь разобратся. Зарание благодарен за помощь.
Ответить
Вызывать функцию надо без function, просто threewrite();
Ответить
ура!!!!!!! огромное спасибо!!!!!
Ответить
Здравствуйте! Михаил такой вопрос можно ли сделать так чтобы alert("привет"); Повторялось само как в php?
Ответить
Все казалось бы понятно, но вот столкнулся с проблемой. В Adobe Acrobat XI сделал форму. В форме несколько полей в которых надо привести текст к верхнему регистру. В свойствах полей есть вкладки "Действия" и "Формат", если в "Формат"-"Настройка" ставлю скрипт event.value=event.value.toUpperCase(); все работает нормально. А как написать функцию для этих действий и как ее вызвать? Код короткий можно в каждом поле прописать, но важен принцип написания и вызова функции. Всем спасибо.
Ответить
Здравствуйте, Михаил! У Вас отличные статьи, удачно выбрана методика, не утомляет дозированный материал. Мой вопрос, может быть, не в тему. Но, все-таки, объясните назначение атрибута target='_blank' в кнопке и текстовой ссылке.
Ответить
target='_blank', открывает ссылку в новом окне браузера.
Ответить
Во многих языках функции могут получать параметры по ссылке, и это удобно. Например, в PHP для этого при вызове функции переменной приписывается &. Но в JavaScript такой возможности не видно, да и Вы, Михаил, не пишет об этом. Значит, передавать аргументы можно только по значению. И в этом легко убедиться на числах и строках. Но, работая с массивами, обнаружил, что интерпретатор обрабатывает массивы иначе. Вот простенький код, здесь массив модифицируется как при передаче по ссылке: function test(a) { a[7] = 5; } var x= [1,2,3]; test(x); document.write(x); Конечно, я это стал повсеместно использовать, т.к. удобно: и массив модифицируется и можно возвращать оператором return дополнительную информацию. Михаил, это дырка в трансляторе или спасательный круг для программистов?
Ответить
А можно подробнее про последний пример и оператор 'return'? Что и куда он возвращает и почему без этой строчки пример не работает?
Ответить
при нажатии на кнопку картинка меняетса может быть 3,5,10 картинок подскажите как сделать такои скрипт
Ответить
Здравствуйте! Столкнулся с таким заданием: Напишите функцию hello(), которая при вызове будет принимать переменную name и выводить строку на основе name, а в случае отсутствующего аргумента выводить «Привет, гость». Искал как сделать, пробовал разные методы, но не получается, не подскажите как реализовать?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.