Замыкания в функциях

112
14 июня 2021, 15:30
let arr = [1, 2, 3, 4, 5, 6]
arr.filter(function() {
  return function(x) {
    return x == 3
  }
})

Почему вывод целый массив? Если убрать одну функцию , то все ок. Вопрос касательно замыканий.Вложенная функция имеет доступ ко всему,что выше

Answer 1

Никаких замыканий здесь нет. Для каждого элемента массива Вы возвращаете из обработчика, поданного в filter, анонимную функцию function(x) { ... }, не вызывая ее. (Ее вообще никто не вызывает.) Булевское значение, соответствующее ссылке на функцию, - true.

let arr = [1, 2, 3, 4, 5, 6] 
console.log(arr.filter(function(x) { 
    return x == 3 
})); 
 
console.log(arr.filter((x) => x == 3));

Answer 2

Всё очень просто. Фильтрующая функция должна возвращать true или false для каждого элемента массива. Те элементы, для которых вернётся true, будут добавлены в результирующий массив, остальные будут отброшены. А что возвращает ваша фильтрующая функция? Она возвращает анонимную функцию! Не true, не false, функцию! При приведении типа функция выглядит скорее как true, чем false (console.log(Boolean(function() {}));). И значит все элементы исходного массива добавятся в результат фильтрации.

READ ALSO
Проблема с запуском локального сервера после клонирования проекта на другой компьютер

Проблема с запуском локального сервера после клонирования проекта на другой компьютер

Решил впервые поработать удаленно дома над своим проектом на nodejs, в котором установлены некоторые модули

102
Как во время отправки ajax запроса сделать всплывающее на 5 сек модальное окно?

Как во время отправки ajax запроса сделать всплывающее на 5 сек модальное окно?

Есть типичная форма отправки сообщения, которая отправляет данные на php страницу c помощью ajax с которой идет перенаправление обратно, и при...

86
как создать анимацию на javascript?

как создать анимацию на javascript?

на днях смотрел как создать игру на джаваскрипт так скажем практиковался и тут проблема нужно создать анимацию что бы картинка менялась...

79
Передать на сервер файлы Vuejs + Laravel

Передать на сервер файлы Vuejs + Laravel

как передать на сервер файлы и обработать их?

73