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

Переопределение функций в 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, при этом саму функцию мы не вызываем. Вызов функции идет чуть позже, а затем мы вызываем функцию по ссылке, сохраненной в переменной и видим, что переопределение не срабатывает.

Читайте также  Перехват ошибок в JavaScript, "try..catch"

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

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Плюсануть
Поделиться

Об авторе

admin administrator

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: