Замыкание (Фильтрация через функцию)
Есть задача 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, да? |
Вопрос - откуда function(number) в функции inBetween() знает про текущий номер элемента в массиве при его переборе в функции function filter(arr, func) ?
Мы ведь не указываем function(number) в функции inBetween() его значение number, да? |
|
Кирилл 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? Прошу прощения если что-то не правильно написал. |
Кирилл 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. |