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

Последнее обновление: 29.10.2023

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

function print(){
	console.log("Доброе утро");
	print = function(){
		console.log("Добрый день");
	}
}

print(); // Доброе утро
print(); // Добрый день

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

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

function print(){
	console.log("Доброе утро");
	print = function(){
		console.log("Добрый день");
	}
}
// присвоение ссылки на функцию до переопределения
const printMessage = print;
print(); // Доброе утро
print(); // Добрый день
printMessage(); // Доброе утро
printMessage(); // Доброе утро

Здесь переменная printMessage получает ссылку на функцию print до ее переопределения. Поэтому при вызове printMessage() будет вызываться непереопределенная версия функции print.

Но допустим, мы определили переменную printMessage уже после вызова функции print:

print(); // Доброе утро
print(); // Добрый день
const printMessage = print;
printMessage(); // Добрый день
printMessage(); // Добрый день

В этом случае переменная printMessage будет указывать на переопределенную версию функции print.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850