Я создаю массив, и хочу уменьшать все его элементы на один с каждым вызовом функции myReduceByOne(), помогите разобраться почему не работает через замыкание ?
var numb = [88,88,88,88,88];
function createReduce() {
var arrBefore = numb;
var reduceByOne = function() {
return arrBefore.map(function(item,i,arr) {
return item-1;
});
}
return reduceByOne;
}
var myReduceByOne = createReduce();
console.log(myReduceByOne());
console.log(myReduceByOne());
console.log(myReduceByOne());
в коде по аналогии с которым вы пытаетесь сделать counter++ означает, что исходный counter который находится в лексической области видимости замыкающей функции увеличивается на 1. В том коде который у вас в вопросе ничего подобного нет. Для того, что бы это работало, вам надо изменять arrBefore. То есть сначала присваивать, а потом возвращать:
var numb = [88,88,88,88,88];
function createReduce() {
var arrBefore = numb;
var reduceByOne = function() {
arrBefore = arrBefore.map(function(item,i,arr) {
return item-1;
});
return arrBefore;
}
return reduceByOne;
}
var myReduceByOne = createReduce();
console.log(myReduceByOne());
console.log(myReduceByOne());
console.log(myReduceByOne());
Сборка персонального компьютера от Artline: умный выбор для современных пользователей