2016-06-14 2 views
1

나는 JS 책의 예제를 고수하고있다. 다음은 Arrow 함수입니다. 잘 작동하지만 함수가 참조하는 변수는 무엇입니까? "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]));

+4

이것은 화살표 기능에 관한 것이 아닙니다. 'sort'는 고차 함수이며 두 개의 인수로 호출되는 콜백을 사용합니다. 'a'와'b'는 원하는 이름으로 부를 수 있습니다. – elclanrs

+0

이 책에는 실제로 * arr.sort ((a, b) => a.name [1]

+0

그래도 되나요? 나는'{}'을 감싸는 것을 생략하는 화살표 함수가 자동으로 리턴된다고 생각했습니다. 편집 : 그것은 작동합니다 (아마 나는'name [1]'이 아니라'name [0]') – pmilla1606

답변

4

ab의 값 인 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

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

Array#sort 내부, 당신은 당신의 콜백에 전화를 상상할 수), 코드 은 어떤 인수를 얻고 그 값을 결정하는 코드입니다. (간략화를 위해 일부의 응용 프로그램을 무시).


BTW

1 : 그 코드가 잘못되면, sort 콜의 리턴 값은 번호하지 부울 가정된다 : 0a 이프 및 b은 정렬 목적으로 동일하며 0보다 작 으면 a은 정렬 목적으로 b보다 작음 (b보다 앞에 와야 함) 정렬을 위해 a이 "보다 큼"b 인 경우 0보다 커야합니다 (이후이어야 함).). String#localeCompare가 적절한 값을 반환하기 때문에 ...

// Reverse alpha by second letter in name 
console.log(arr.sort((a, b) => b.name[1].localeCompare(a.name[1]))); 

: ([인용 코드에 주석에서] "이름 속성의 두 번째 문자 알파벳 순으로 역 분류"배열에 대한) 여기에 올바른 버전의

당신이 부르는 문자열이 당신이 부르는 문자열보다 "작다"또는 "더 큰"것입니다. (그리고 name[1]은 한 자의 문자열입니다.)

관련 문제