var users = [{
name: "Вася",
surname: 'Иванов',
age: 20
}, {
name: "Петя",
surname: 'Чапаев',
age: 25
}, {
name: "Маша",
surname: 'Медведева',
age: 18
}];
function byField(field){
return function (a,b){
return a[field] > b[field] ? 1 : -1;
}
}
users.sort(byField('name'));
users.forEach(function(user) {
alert( user.name );
});
Этот код работает, но откуда вложенная функция в функцию byField берёт переменные a и b, если [[Scope]] для byField = window, а для вложенной функции - byField(). Место, откуда функция вызывается, влияет на [[Scope]]? Ведь каким-то образом a и b с sort() передались для byField()