Задать вопрос
@Velms
Изучаю JavaScript

Пример замыкания при использовании метода arr.filter( ). Как это работает?

Есть вот такой пример использования замыкания на learn.javascript:

function inBetween(a, b) {
return function(x) {
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

Но объяснения, как сие работает, никакого нет. Не совсем понятно здесь, откуда прилетает некие нигде не объявленный аргумент x в анонимную внутреннюю функцию? Интуитивно предполагаю, что ее может определять сам метод filter при прохождении по массиву, но сам механизм не совсем понятен..
Заранее спасибо и всем здоровья.
  • Вопрос задан
  • 222 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Aetae
@Aetae
Тлен
const newFunction = inBetween(3, 6);
равносильно
const newFunction = function(x) {
	return x >= 3 && x <= 6;
};


arr.filter(inBetween(3, 6))
равносильно
arr.filter(newFunction)
равносильно
arr.filter(function(x) {
	return x >= 3 && x <= 6;
})
Ответ написан
Комментировать
@galaxy
Но объяснения, как сие работает, никакого нет. Не совсем понятно здесь, откуда прилетает некие нигде не объявленный аргумент x в анонимную внутреннюю функцию? Интуитивно предполагаю, что ее может определять сам метод filter при прохождении по массиву, но сам механизм не совсем понятен..

так и работает

Метод filter() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве, и создаёт новый массив со всеми значениями, для которых функция callback вернула значение, которое может приведено к true. Функция callback вызывается только для индексов массива с уже определёнными значениями; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались. Элементы массива, не прошедшие проверку функцией callback, просто пропускаются и не включаются в новый массив.

Функция callback вызывается с тремя аргументами:

1. значение элемента;
2. индекс элемента;
3. массив, по которому осуществляется проход.


https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы