Прохожу учебник по 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);
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости