Здравствуйте!
Я новичок, читаю книжку по Javascript, и никак не могу понять один момент:
1. У нас есть данные в JSON формате в переменной ANCESTRY_FILE:
eloquentjavascript.net/code/ancestry.js
2 .Мы конвертируем его в объект Javascript:
var ancestry = JSON.parse(ANCESTRY_FILE);
3. Нам нужно найти людей, кто родился с 1900 по 1925 года, и предлагается такой вариант реализации:
function filter(array, test) {
var passed = [];
for (var i = 0; i < array.length; i++) {
if (test(array[i]))
passed.push(array[i]);
}
return passed;
}
//Вызываем функцию
console.log(filter(ancestry, function(person) {
return person.born > 1900 && person.born < 1925;
}));
Мы вызываем функцию "filter" в качестве первого аргумента используем наш объект а в качестве второго аргумента функцию. Тут я понимаю как пошагово будет вести себя парсер и почему нам вернут 3 объекта.
5. Но дальше нам предлагают вызвать функцию по другому, как метод объекта ancestry, и мы получаем точно такой же результат, нам вернут 3 тех же объекта.
//Вызываем функцию
console.log(ancestry.filter(function(person) {
return person.born > 1900 && person.born < 1925;
}));
Я никак не могу понять, как будет вести себя парсер JS, и почему этот код работает. Как я понимаю, судя по приоритету операторов сначала будет исполнен этот код:
filter(function(person) {
return person.born > 1900 && person.born < 1925;
})
А дальше вообще не могу понять что происходит. Мы задаем функции "filter" только один аргумент в виде функции которая возвращает "person.born > 1900 && person.born < 1925". Как мы даем понять функции filter из какого объекта брать данные... В книжке только пишут "Like forEach, filter is also a standard method on arrays", то есть "Как и forEach, filter является стандартным методом массивов". Это все понятно вроде, но это не объясняет почему этот способ работает...
Буду благодарен, если кто-то сможет написать как подробно будет выполнятся код начиная с моего пункта 5, где мы вызываем функцию filter как метод объекта ancestry. Вроде и теоретические знания есть но никак не могу понять уже второй день... Толи я так туплю толи что, не знаю ( Буду благодарен любой помощи.
Заранее спасибо