Yutex - Платный хостинг PHP.
Advego.ru - система покупки и продажи контента для сайтов, форумов и блогов

Технические фишки инфобизнеса 2014

Статьи для сайтов!!!
Дизайн сайтов
Свойства onmouseover и onmouseout – Наведение мыши Функциональные выражения Передача функции в функцию

Объявление функций - Функциональные выражения в javascript - Различия между ними

Количество просмотров: 173

До написания этого материала, работа с функциями начиналась с того, что функцию нужно было объявить, то есть сначала писалось ключевое слово function, указывалось ее имя, затем в круглых скобках один или несколько параметров функции и, наконец, в фигурных скобках - ее тело (код, который она выполняет).

Объявление функции в javascript

Итак, объявление функции выглядит следующим образом:

function any_1(param_1){
for(i = 0; i < param_1; i++){
document.write("Hi </br>");
}
}

any_1(3);

Что представляет собой объявление функции?

  • Функция создается (объявляется) при помощи ключевого слова 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);

Сейчас перед Вами (см. код выше) функциональное выражение. Что мы видим здесь?

  • Ключевое слово 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

Итак, основной вывод здесь таков: ссылка на функцию (как бы та ни создавалась - по определению или по значению) остается ссылкой. Ссылка хранится в переменной, и она может быть передана любой другой переменной. А также следует научиться относиться к функциям как к значениям.

Частота просмотра уроков
JavaScript
Свойства onmouseover и onmouseout – Наведение мыши Функциональные выражения Передача функции в функцию

Ваши комментарии:

Комментариев нет...

Добавить комментарий:

Ваше Имя:*
Комментарий:*
Ответьте на вопрос: *
Сколько дней в Високосном году?
* - поля обязательные для заполнения.
ПОИСК ПО САЙТУ:

Моё имя Антон. Связаться со мною Вы можете по e-mail: averagev@mail.ru