[1, -2, 15, 2, 0, 8].sort(function(a, b) { alert( a + " <> " + b ); return a - b; }); 이 코드인데 처음 sort 메서드가 실행되고 인수로 함수 a, b에 a = 1, b = -2가 전달되잔 그럼 alert 처음 실행되고 출력되는게 1 <> -2 아님??
근데 왜자꾸 -2 <> 1 이 실행되고 지피티한테 물어봐도 설명을 좃같이못하는데
이다음도 이해가안가는데 1, -2 비교했으면 1, 15가 인수로 들어가니까 1 <> 15 or 15 <> 1이 되어야하는데
15 <> -2 이지랄하는데 내가 뭘 놓치고 있는거임???? 자바스크립트 왜케 어렵냐 예전에 했을때 이런거 못느꼈는데 내용 스킵하고 했었나
sort가 정렬임. 정렬하면 -2 , 1 맞지 처음에
이 코드를 실행하면서 발생하는 alert 순서와 a-b 결과를 보여드리겠습니다:Copy1 <> -2 (a-b = 3)1 <> 15 (a-b = -14)-2 <> 15 (a-b = -17)15 <> 2 (a-b = 13)15 <> 0 (a-b = 15)2 <> 0 (a-b = 2)15 <> 8 (a-b = 7)2 <> 8 (a-b = -6)0 <> 8 (a-b = -8)최종 정렬 결과: [-2, 0, 1, 2, 8, 15]각 단계에서 alert는 두 값을 비교할 때마다 표시되며, a-b의 결과가 양수면 a가 b보다 뒤로, 음수면 앞으로 정렬됩니다.
이거레
함수가 실행되면 첫번째 코드로 alert문이 실행되는데 님이 적어준것처럼 1 <> -2 가 나와야되는거 아님? 글고 전체적인 순서도 코드 실행했을때랑 적어준거랑 다름
alert( a + " <> " + b ); // 1 <> -2 return 3 // 양수니까 순서 교환 -2, 1, 15, 2, 0, 8 이런식으로 진행되는거 아님?
Sort 구현은 그냥 블랙박스라고 생각해야함 딱히 명세에 무슨 알고리즘 써야한다고 정해진것도 없을거고 엔진마다 최적화 위해서 방식도 다를거임
그럼 이해하려하지말고 걍 받아들여야되요?
그냥 이해할 필요가 없음. 저기서 비교 순서 자체가 아무 의미가 없음 정말 궁금하면 v8 엔진 코드 읽어보면 되는거고
그렇긴한데 alert문이 내생각이랑 다르게 움직이니까 이런걸 잘 못넘어가서 ㅇㅋㅇㅋ
C로 sort종류별로 빠따 맞으면서 배웠어야 했다
https://github.com/v8/v8/blob/main/src/snapshot/sort-builtins.cc
이거
보면 대충 알듯