Прохожу учебник по JS на известном сайте, и вроде я понял замыкания, осознал. Но... Вот решение к заданию:
filter(arr, func)
, которая получает массив arr
и
возвращает новый, в который входят только те элементы arr
, для
которых func
возвращает true
.inBetween(a,b)
– «между a
,b
», inArray([...])
– "в массиве [...]
". Использование должно быть таким:Я хоть убейте второй день не могу понять откуда inBetween
берет a и b,
это функция вроде создана в другом lexical environment
.
В общем объясните, чтобы до меня дошло. Почему это работает?
function filter(arr, func) {
var result = [];
for (var i = 0; i < arr.length; i++) {
var val = arr[i];
if (func(val)) {
result.push(val);
}
}
return result;
}
function inBetween(a, b) {
return function(x) {
return x >= a && x <= b;
};
}
var arr = [1, 2, 3, 4, 5, 6, 7];
alert( filter(arr, inBetween(3, 6)) ); // 3,4,5,6
Так как функция-замыкание inBetween() возвращает новую функцию, то для наглядности подставим код этой самой новой функции вместо её вызова здесь:
a b
alert( filter(arr, inBetween(3, 6)) );
Получим такой код, где вместо a и b соответственно аргументы 3 и 6:
alert( filter(arr, function(x) {
return x >= 3 && x <= 6;
})
);
Ну а дальше просто происходит вызов этой функции для каждого элемента массива, где выполняется проверка на принадлежность диапазону [3,6]:
if (func(val)) {
result.push(val);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеСоздал на сайте кнопку, по клику на которую должны появляться браузерные уведомления
Хочу написать функцию проверки наличия формы на страницеФорма любая