@Alex_87

Не могу понять задачу по замыканию?

Здравствуйте! На сайте https://learn.javascript.ru/ темы Локальные переменные для объекта (по замыканием) Не могу понять решение следующей задачи:
5c2def39b302c663785966.png
Само решение:
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;
    };
  }

function inArray(arr) {
    return function(x) {
      return arr.indexOf(x) != -1;
    };
  }

var arr = [1, 2, 3, 4, 5, 6, 7];
alert( filter(arr, inBetween(3, 6)) ); // 3,4,5,6

Мне непонятна функция inBetween и inArray. Откуда она берёт этот "x"? Откуда и как он берётся, поясните пожалуйста?
  • Вопрос задан
  • 667 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Lukentui
Vue.JS | Express.JS | Laravel | Python
a, b - аргументы, числа между которыми идет выборка
x - массив, с которым мы работаем

P.S Задача сделана просто ужасно, попрошу харкнуть в лицо ее автору при личной встрече.
Ответ написан
SagePtr
@SagePtr
Еда - это святое
if (func(val)) {
вот тут значение val передаётся в функцию в виде аргумента x.
Ответ написан
shagor
@shagor
Front-end developer
Например на восьмой строке функция filter принимает 2 аргумента: массив и РЕЗУЛЬТАТ вызова функции inBetween т.е.
function(x) {
return x >= 3 && x <= 6;
}, вот в нее то мы и передаём потом val
Ответ написан
@execto
filter(arr, inBetween(3, 6))
Когда вызывается функция filter, в эту функцию передается результат вызова функции inBetween с аргументами 3, 6, эти аргументы сохраняются в замыкании, сама же функция inBetween возвращает функцию
function(x) {
return x >= a && x <= b;
};
Которая и передается уже в функцию filter как аргумент func, и когда преданная функция вызывается внутри filter, то она достает аргументы 3 и 6 из замыкания, а и принимает аргумент x, которые внутри filter передается как val
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы