Переопределение функций в JavaScript

Оцените материал
(0 голосов)

Здравствуйте! В этом заключительном уроке по функциям в JavaScript  речь пойдет о такой интересной особенности функций, как переопределение фунуций. Все дело в том, что, если в функции определить переменную, которая совпадает с названием функции и в эту переменнуюв свою очередь поместить анонимную фцнкцию, то при первом вызове  функции сработает основной блок функции, а при последующих вызовах будет срабатывать, то что возвращает наша переменная внутри функции. Давайте рассмотрим как всегда на примерах.

Переопределение функций JavaScript

 

Переопределение функций

Рассмотрим простой пример на переопределение функций.

 function greetings(){
    alert("Доброе утро");
    greetings = function(){
        alert("Добрый день");
    }
}
greetings(); // Доброе утро
greetings(); // Добрый день

Просмотреть  пример

В примере объявлена функция greetings и дальше в самой функции есть  глобальная переменная ( о локальных и глобальных переменных читайте здесь) с одноименным названием, которая тоже является функцией. При первом вызове срабатывает основное тело функции и мы видим приветствие "Доброе утро".

При последующих вызовах функции будет уже срабатывать переопределенная версия, которая находится в переменной, совпадающей с названием функции и будет выводиться сообщение "Добрый день". 

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

  function greetings(){
    alert("Доброе утро");
    greeetings = function(){
        alert("Добрый день");
    }
}
// присвоение ссылки на функцию до переопределения
var disp = greetings;
greetings(); // Доброе утро
greetings(); // Добрый день
disp(); // Доброе утро
disp(); // Доброе утро

Просмотреть  пример

В примере мы получаем ссылку на функцию и сохраняем в переменную disp, при этом саму функцию мы не вызываем. Вызов функции идет чуть позже, а затем мы вызываем функцию по ссылке, сохраненной в переменной и видим, что переопределение не срабатывает.

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

 greetings(); // Доброе утро
greetings(); // Добрый день
var disp = greetings;
disp(); // Добрый день
disp(); // Добрый день

Просмотреть  пример

Прочитано 137 раз Последнее изменение Понедельник, 25 сентября 2017 16:56
Другие материалы в этой категории:
Понравилась запись? Подпишитесь на обновления по почте:

Нетология

TemplateMonster

Поиск по сайту

Связной трэвел

Google+