что такое b в функции и как она получает
function inBetween(a, b) {
return function(x, b) {
console.log(b);
return x >= a && x <= b;
};
}
let arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.filter(inBetween(3, 6))); // 3,4,5,6
Ответы (3 шт):
Ваш код возвращает на самом деле пустой массив. Это из-за того, что переменная b во внутренней функции затеняет переменную b во внешней. Во внешней функции переменная b означает максимальную границу выборки. А во внутренней функции она уже означает индекс массива (подробнее об аргументах, которые получает функция, передаваемая в filter()). Пустым массив получается потому, что индекс элемента в данном массиве из примера всегда получается меньше значения элемента, поэтому проверка x <= b всегда возвращает false.
Исправить можно так:
function inBetween(min, max) { // min в данном примере = 3, а max = 6
return function(x, b) { // x тут будет = элементу массива, а b = индексу
console.log(b);
return x >= min && x <= max;
};
}
let arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.filter(inBetween(3, 6))); // 3,4,5,6
function inBetween(a, b) {
return function(x, b) {
console.log(b);
return x >= a && x <= b;
};
}
let arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.filter(inBetween(3, 6))); // (*)
(*) Вызов inBetween(3, 6) создает замыкание (a = 3, b = 6), возвращает новую функцию, которая помнит эти значения и отправляется в filter().
Фильтр вызывает эту функцию для каждого элемента, и передает ей три аргумента,(значение_элемента, номер_элемента, ссылка_на_массив)
Соответственно, x получает значения элементов, b - их номера. И это внутреннее b не имеет никакого отношения к внешнему b из замыкания (и вовсе не нужен там).
function inBetween(a, b) {
return function(x, index) {
console.log(index);
return a <= x && x <= b; // Сравнение с внешними `a` и `b`
};
}
let arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.filter(inBetween(3, 6)));