JavaScript currying:返回在当前函数外部定义的函数

JavaScript currying:返回在当前函数外部定义的函数,javascript,closures,currying,Javascript,Closures,Currying,我正在学习JS中的currying函数,我遇到了这个问题 我的目标是按非任意属性对对象数组进行排序 let people = [ { name: 'Bob', age: 27 }, { name: 'Al', age: 47 } ]; var compare = function(a, b) { if (a[property] < b[property]) return -1; if (a[property] > b[property]) retu

我正在学习JS中的currying函数,我遇到了这个问题

我的目标是按非任意属性对对象数组进行排序

let people = [
    { name: 'Bob', age: 27 },
    { name: 'Al',  age: 47 }
];

var compare = function(a, b) {
    if (a[property] < b[property]) return -1;
    if (a[property] > b[property]) return 1;
    return 0;
};

function sortBy(property) {
    /* // this works
    return function compare(a, b) {
        if (a[property] < b[property]) return -1;
        if (a[property] > b[property]) return 1;
        return 0;
    };
    */

    // this doesn't work
    return compare;
}

people.sort(sortBy('name'));
console.log(people);
let people=[
{姓名:'Bob',年龄:27},
{姓名:'Al',年龄:47}
];
var比较=功能(a,b){
如果(a[属性]b[property])返回1;
返回0;
};
函数排序(属性){
/*//这很管用
返回函数比较(a,b){
如果(a[属性]b[property])返回1;
返回0;
};
*/
//这不管用
返回比较;
}
people.sort(sortBy('name'));
console.log(人);
使用此代码,我得到以下错误:

if (a[property] < b[property]) return -1;
          ^
ReferenceError: property is not defined
if(a[property]
为什么如果我在
sortBy
函数中定义
compare
函数,我不会得到任何错误,相反,如果我在函数外部定义
compare
函数,我会得到一个错误


compare
函数不应包含在闭包中?

我能找到的最好方法是使用,但它并不完美,因为它迫使您在
compare
中添加
,这意味着您不能在没有绑定的情况下使用它

这是因为返回函数不会将当前作用域绑定到它,除非它是在当前作用域中创建的

let people=[
{姓名:'Bob',年龄:27},
{姓名:'Al',年龄:47}
];
var比较=功能(a,b){
如果(a[this.property]b[this.property])返回1;
返回0;
};
函数排序(属性){
返回compare.bind({property});
}
people.sort(sortBy('name'));

console.log(人)JavaScript具有词法范围,而不是动态范围。“比较函数不应该包含在闭包中?”为什么?因为当。。。没有“财产”。我不确定您期望或询问的是什么,如果希望“属性”可用,它必须存在。在这一行中,`if(a[property]属性
甚至指什么?您没有将它传递到函数中,它也不是全局变量,也不是本地可访问的。但是,当您在
sortBy