Почему не возникает замыкания?

234
08 января 2018, 11:39

Я создаю массив, и хочу уменьшать все его элементы на один с каждым вызовом функции 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());
Answer 1

в коде по аналогии с которым вы пытаетесь сделать 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());

READ ALSO
Open Server игнорирует изменения в файлах

Open Server игнорирует изменения в файлах

Привет!У меня есть сайт на ворд пресс который я поставил на опен сервер, но я ввожу изменения в файлик Css а OpenServer меня игнорирует

242
PayPal в лайв-режиме игнорируется IPN

PayPal в лайв-режиме игнорируется IPN

На сайте установлена PayPal кнопка мгновенного платежа "Купить сейчас"Оплата реализована через php-скрипт IPN, в результате работы которого в случае...

245
php ssh2 ошибка

php ssh2 ошибка

Windows 10 64 (Пробовал и для windows 7 64)

267
Создать select циклом

Создать select циклом

Нужно сделать выпадающий список, где option - это штаты

205