Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Замыкание (Фильтрация через функцию) (https://javascript.ru/forum/dom-window/77998-zamykanie-filtraciya-cherez-funkciyu.html)

Кирилл Margheriti 11.07.2019 12:22

Замыкание (Фильтрация через функцию)
 
Есть задача https://learn.javascript.ru/task/fil...rough-function

Решение следующее
var arr = [1, 2, 3, 4, 5, 6, 7];

function filter(arr, func) {
    var newArr = arr.filter(func);
    return newArr;
}

function inBetween(a, b) {
    return function(number) {
        if (number >= a && number <= b) {
            return true;
        }
    };
}

function inArray(Array) {
    return function(number) {
        for (var i = 0; i < Array.length; i++) {
            if (number === Array[i]) {
                return true;
            }
        }
    }
}

alert(filter(arr, inBetween(3, 6)));
alert(filter(arr, inArray([1, 2, 5, 10, 3])));




Вопрос - откуда function(number) в функции inBetween() знает про текущий номер элемента в массиве при его переборе в функции function filter(arr, func) ?


Мы ведь не указываем function(number) в функции inBetween() его значение number, да?

Кирилл Margheriti 11.07.2019 12:49

Вопрос - откуда function(number) в функции inBetween() знает про текущий номер элемента в массиве при его переборе в функции function filter(arr, func) ?


Мы ведь не указываем function(number) в функции inBetween() его значение number, да?

рони 11.07.2019 12:50

Кирилл Margheriti,
код обработайте здесь, перед вставкой на форум
https://beautifier.io/

рони 11.07.2019 12:58

Кирилл Margheriti,
аргументы передаёт встроенный метод массива строка 5 filter

Array.prototype.filter()

Кирилл Margheriti 11.07.2019 13:07

Цитата:

Сообщение от рони (Сообщение 510136)
Кирилл Margheriti,
аргументы передаёт встроенный метод массива строка 5 filter

Array.prototype.filter()

Это я понял.
function inBetween(a, b) {
       return function(number) {
        if (number >= a && number <= b) {
            return true;
        }
    };
}

Но как эта функция получает number?


Получается что-то такое.
var newArr = arr.filter(inBetween(a, b));
И как с помощью замыкания он узнает про number?



Прошу прощения если что-то не правильно написал.

рони 11.07.2019 13:22

Кирилл Margheriti,
строка 2 превращает inBetween в анонимную функцию.
var newArr = arr.filter(inBetween(a, b));
тоже что
var newArr = arr.filter(function(number) {
        if (number >= a && number <= b) {
            return true;
        }
    }
);


Часовой пояс GMT +3, время: 21:16.