Далее на странице...
До написания этого материала, работа с функциями начиналась с того, что функцию нужно было объявить, то есть сначала писалось ключевое слово function, указывалось ее имя, затем в круглых скобках один или несколько параметров функции и, наконец, в фигурных скобках - ее тело (код, который она выполняет).
Объявление функции в javascript
Объявление функции в JavaScript выглядит следующим образом.
function any_1(param_1){
for(i = 0; i < param_1; i++){
document.write("Hi </br>");
}
}
any_1(3);
Объявление функции в javascript
HiHi
Hi
Что представляет собой объявление функции?
-
Функция создается (объявляется) при помощи ключевого слова function;
-
Она имеет имя - в данном случае any_1;
-
У нее есть параметр - param_1;
-
У функции есть тело (фрагмент кода) - в нашем случае цикл;
-
Вызов функции происходит по ее имени any_1 с указанием аргумента(ов)(3).
Следует знать, что при объявлении функции создается переменная с тем же именем (в нашем случае переменная any_1). Переменная используется для хранения ссылки на функцию. На самом деле при вызове функции указывается имя переменной, но так как их имена совпадают, то в основном говориться именно об имени функции.
Функциональное выражение в javascript
Ключевое слово function нередко можно встретить в ином представлении... Далее рассмотрим, какой вид может иметь функциональное выражение.
var any_2 = function(param_2){
for(i = 0; i < param_2; i++){
document.write("by-by </br>");
}
}
any_2(2);
Функциональное выражение в javascript
by-byby-by
Сейчас было рассмотрено функциональное выражение. Что мы при этом увидели?
-
Ключевое слово function используется внутри команды присваивания "=";
-
Функция не имеет имени: она присваивается переменной any_2;
-
У функции есть параметр - param_2;
-
И также есть тело - это снова цикл;
-
Вызов функции происходит при помощи переменной any_2, которой она была присвоена.
При работе с функциональными выражениями, где используется команда присваивания "=", переменная, которой присваивается значение функции, является ссылкой (она указывает) на функцию.
Ссылка используется для вызова функции. Кроме этого, ссылку можно присвоить другой переменной, сохранить в объекте, передать или вернуть из функции.
Различия между объявлением функций и функциональными выражениями
Здесь можно подвести итог и перечислить различия между объявлением функции и функциональными выражениями (стоит сказать, что пока, без практики, все может выглядеть довольно запутанно, но ничего не поделаешь).
Объявление функции не возвращает ссылку на нее. При объявлении создается переменная с именем функции. В этой переменной хранится ссылка на функцию.
Функциональное выражение возвращает ссылку на функцию. И Вы можете решить, что с этой ссылкой делать дальше.
В обоих случаях ссылки на функцию хранятся в переменных: в случае с функциональным выражением присваивание функции переменной происходит явно, в случае с объявлением функции - связи переменной с функцией не видно, но она есть.
Объявление функции - это команда, так как при этом происходит скрытое присваивание.
Функциональные выражения используются в командах. Например, в команде присваивания - как и рассмотрено на этой странице: функциональное выражение расположено в правой части команды.
В обоих случаях процедура вызова функции одинакова: указывается имя переменной и в круглых скобках аргумент(ы).
И еще один важный момент, скрытый от глаз Javascript-разработчика:
- в первую очередь браузер обрабатывает объявления функций, где бы они не находились в коде.
- после этого браузер начинает работать с кодом сначала и обрабатывает объявление переменных, функциональные выражения, сравнения и т.д.
Функция - это значение. Ссылка на функцию
Функции можно рассматривать как значения. До сих пор они рассматривались как нечто такое, то что можно вызвать и что несет в себе выполнение фрагмента кода.
Тем не менее, это и значение тоже. Значение, которое является ссылкой на функцию.
Стоит заметить: независимо от способа создания функции мы будем иметь ссылку на нее.
Как уже было сказано ранее как при объявлении функции, так и в случае с функциональным выражением, ссылка на функцию храниться в переменной.
В первом случае, javascript самостоятельно, одновременно с объявлением функции создает одноимённую переменную и помещает в нее ссылку на функцию.
Объявление функции any_1:
function any_1(param_1){
for(i = 0; i < param_1; i++){
document.write("Hi </br>");
}
}
Javascript создает переменную any_1 для хранения ссылки на функцию.
any_1(3); - вызов функции через переменную any_1
Результат:
Hi
Hi
Hi
В случае с функциональным выражением при помощи команды "=" происходит явное присваивание переменной ссылки на функцию.
Функциональное выражение:
var any_2 = function(param_2){
for(i = 0; i < param_2; i++){
document.write("by-by </br>");
}
}
Присваиваем ссылку на функцию переменной any_2.
any_2(2); - вызов функции через переменную any_2
Результат:
by-by
by-by
Раз уж здесь рассматриваются функции, как значения, то обе переменных any_1 и any_2, содержащие ссылки на функции, содержат определенные значения.
Как известно, значение любой переменной можно присвоить другой переменной. Сделаем это со значениями переменных any_1 и any_2 (присвоим их значения другим переменным).
var any_11 = any_1;
Теперь как переменная any_1, так и переменная any_11 содержат ссылку на одну и ту же функцию.
any_1(3); - вызов функции через переменную any_1
Результат:
Hi
Hi
Hi
any_11(1); - вызов через переменную any_11
Результат:
Hi
var any_22 = any_2;
Аналогично, обе переменных: any_2 и any_22 содержат ссылку на одну и ту же функцию.
any_2(1); - вызов функции через переменную any_2
Результат:
by-by
any_22(4); - вызов через переменную any_22
Результат:
by-by
by-by
by-by
by-by
Итак, основной вывод таков: ссылка на функцию (как бы та ни создавалась - по определению или по значению) остается ссылкой. Ссылка хранится в переменной, и она может быть передана любой другой переменной. Также следует научиться относиться к функциям как к значениям.