Помогите разобраться в работе функции
При каждом вызове функции она увеличивает аргумент на 1. Можно ли как-то реализовать это без вызова второй функции внутри? Не совсем мне ясна логика, почему с функцией внутри код работает, но если её убрать выводится только переданное значение.
function Counter(number) {
return function () {
return ++number;
};
}
var f1 = Counter(0);
console.log(f1());
console.log(f1());
console.log(f1());
console.log(f1());
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Это называется замыкание
function Counter(number) {
return function () {
return ++number;
};
}
var f1 = Counter(0);
console.log(f1());
console.log(f1());
console.log(f1());
console.log(f1());
вызов Counter(0) возвращает функцию которая замкнула в себе переменную number.
Если вы знакомы с OOП то можно произвести аналогию с классами и объектами
function Counter(number) {
return function () {
return ++number;
};
}
это что-то подобие
class Counter{
Counter(number) { // конструктор класса Counter
this._number = number;
}
someMethod: function () { // метод по умолчанию
return ++ this._number;
};
}
что в свою очередь
var f1 = Counter(0);
console.log(f1());
это
var f1 = new Counter(0); // вызов конструктора Counter
console.log(f1.someMethod()); // вызов someMethod объекта f1
PS. Это аналогия только для тех кто знаком с ооп. На самом деле в JS как раз таки наоборот объекты и классы часто представляют через замыкания.