- •2. Что такое события в JavaScript
- •2.1. Как связать событие и JavaScript
- •2.3. Основные события в JavaScript
- •2.4. События, о которых не было сказано
- •3. Return к функциям (функции и события)
- •4. Еще один пример использования функций и событий
- •5. События и его свойства (Event)
- •5.1. Передача объекта Event внутрь обработчика события
- •5.2. Всплывание события cancelBubble
- •5.3. Вызов стандартного обработчика
- •5.4. Практика работы с мышью: перетаскивание элементов
- •6. Функции (нюансы) Итак, события мы рассмотрели полностью, но в функциях существует множество нюансов, поэтому следующая тема будет посвящена именно им.
- •6.1. Знакомство с рекурсией.
- •Пример на рекурсию
- •Р екурсии или итерации?
- •6.2. Функция – это переменная. Несколько видов объявлений функций.
- •6.3. Функция внутри функции
- •6.4. Условная функция
- •7. Самостоятельное задание:
6.2. Функция – это переменная. Несколько видов объявлений функций.
Сейчас мы поделимся секретом, что функция на самом деле переменная, которая хранит реализацию функции, а скобки нужны для запуска этой реализации или передачи параметров. Это означает, что если создать новую переменную и присвоить ей содержимое переменной-функции, то мы создадим копию этой функции:
<html> <head> <script type="text/javascript"> function f () { alert('Это функция!'); } var newf = f; newf(); </script> </head> </html>
Видите, что newf стала тоже функцией. Самое интересное, что после объявления функция возвращает свое значение, и мы можем записать тоже самое следующим образом:
<html> <head> <script type="text/javascript"> var newf = function f () { alert('Это функция!'); } newf(); </script> </head> </html>
Самое интересное, что в данном случае можно и не задавать имя нашей функции и все будет работать:
<html> <head> <script type="text/javascript"> var newf = function () { alert('Это функция!'); } newf(); </script> </head> </html>
Т.е. с самого начала конструкция function () создает функцию без названия, а затем мы ее присваиваем в переменную newf. Это сделано для того, чтобы мы программно могли присваивать обработчики для событий, не создавая самой функции, вернее не задавая ей имя. В общем это нам пригодиться, но рассмотрим эти свойства немного позже.
6.3. Функция внутри функции
Мы уже убедились, что функция – это всего лишь переменная, которая хранит программный код, который выполняется в момент его вызова. А помните, что такое область видимости для переменной?
Область видимости нам дает понять, что создав переменную внутри функции, мы ее будем видеть только внутри этой функции. Как вы думаете, а если мы создадим переменную-функцию внутри другой функции? Правильно, мы ее сможем вызвать только внутри этой функции:
<html> <head> <script type="text/javascript"> function first () { function second () { alert('Функция вызвана'); } second(); } first(); if (typeof second != "undefined") second(); else alert('Функция second недоступна'); </script> </head> </html>
Видите, что вторая функция, которая объявлена внутри первой, вызывается только внутри этой функции, во внешней программе ее вызвать невозможно. Это понятно из правил области видимости.
Эту конструкцию никогда не употребляют, хотя это делать можно. Возможно, вы найдете этой конструкции применение.
6.4. Условная функция
Точно так же, можно создавать функции внутри условных операторов. Думаю следующий пример не нужно комментировать:
<html> <head> <script type="text/javascript"> var what = prompt("Какую функцию вы хотите объявить?\n1. Первую.\n2. Вторую.", 1); what = parseInt(what); var func; if (what == 1) { func = function () { alert('Первая функция'); } } else { func = function () { alert('Вторая функция'); } } func(); </script> </head> </html>
Объявление функций внутри условных операторов нам тоже не пригодиться, но если вы этому найдете применение, то значит, не зря эту конструкцию реализовали в JavaScript.