箭头功能。函数指的是什么变量?

时间:2016-06-14 15:36:36

标签: javascript function variables arrow-functions

我被一本JS书中的例子困住了。这是一个箭头功能。工作正常,但函数指的是什么变量?它是如何知道如何处理" a,b"?

我不明白幕后会发生什么......



const arr = [{
  name: "Suzanne"
}, {
  name: "Jim"
}, {
  name: "Trevor"
}, {
  name: "Amanda"
}];

// arr sorted reverse alphabetically 
// by second letter of name property

console.log(arr.sort((a, b) => a.name[1] < b.name[1]));
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:4)

ab的值由Array#sort函数确定,这是调用箭头函数的函数。它与普通功能相同;例如,您的代码将以相同的方式工作: 1

console.log(arr.sort(function(a, b) {
    return a.name[1] < b.name[1];
});

Array#sort内,您可以设想调用回调:

function Array_sort(callback) {
    // ...

    while (not_done_sorting_yet) {
        // ...
        result = callback(element[x], element[y]); // The call to your callback
        // ...code using result...
    }

    // ...
}

就像任何回调(实际上是任何函数)一样,代码调用它确定它获得的参数及其值。 (为简单起见,忽略部分应用程序。)

1 BTW:该代码错误,sort回调的返回值应该是数字,而不是布尔值:{{1如果0a等于排序目的,那么b小于零是“小于”a用于排序目的(应该在{{1}之前) }},如果b“大于”b用于排序,则大于零(应该在a之后)。

这是正确的版本(对于数组“按名称属性的第二个字母按字母顺序排序”[来自引用代码中的注释]):

b

...因为b会返回一个适当的值,表示您调用它的字符串是“小于”还是“大于”您调用它的字符串。 (// Reverse alpha by second letter in name console.log(arr.sort((a, b) => b.name[1].localeCompare(a.name[1]))); 是一个单字符串。)