splice는 '접착'이라는 뜻을 가지고 있습니다. splice() 메서드가 새 요소를 추가할 수 있다는 점에서 지어진 이름같습니다.
splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다.

let fruits = ['apple', 'banana', 'cherry', 'date'];
// 인덱스 1부터 2개의 요소를 제거
// item에 어떠한 요소도 지정하지 않으면 splice()는 요소를 제거하기만 합니다.
let removed = fruits.splice(1, 2);
console.log(fruits); // ['apple', 'date']
console.log(removed); // ['banana', 'cherry']
let fruits = ['apple', 'banana', 'date'];
// 인덱스 1에 'cherry' 추가
// 첫 번째 인덱스에 어떠한 요소도 삭제하지 않고, 'cherry' 요소만 추가
fruits.splice(1, 0, 'cherry');
console.log(fruits); // ['apple', 'cherry', 'banana', 'date']
let fruits = ['apple', 'banana', 'cherry', 'date'];
// 인덱스 1부터 2개의 요소를 제거하고 그 위치에 'grape', 'kiwi' 추가
fruits.splice(1, 2, 'grape', 'kiwi');
console.log(fruits); // ['apple', 'grape', 'kiwi', 'cherry', 'date']

sort()와 splice()는 원본 배열을 직접 변경합니다.
sort() 메서드는 원배열의 요소를 적절한 위치에 정렬한 후 , 해당 배열을 반환합니다.

즉 , compareFunction (callback)의 반환 값이 0보다 작은 경우 a,b 중 a가 먼저 옵니다.
0을 반환하면 a와 b를 변경하지 않고 넘어갑니다.
0보다 큰 경우는 b가 먼저 오게 됩니다.
const arr = [1, 5, 7, 2, 3, 9, 11];
arr.sort((a, b) => {
return a - b;
// 1,5를 비교했을 때 a-b==-4 -1보다 작으므로 , 1이 먼저 오게 됩니다.
// 5,7을 비교한 후 a-b==-2 -1보다 작으므로 , 5가 먼저 오게 됩니다.
});
console.log(arr);

mdn에서 sort() 메서드를 정의할 때 stable sort가 아닐 수 있다고 적혀있습니다.
stable sort란 배열의 중복된 요소의 순서가 바뀌지 않는 것을 뜻합니다.
예를 들어, const arr=[1,5(1),7(1),5(2),7(2)] 이라는 배열이 존재할 때 (중복 원소의 순서를 나타냅니다. ex) 1번째 5), stable sort는 arr=[1,5(1),5(2),7(1),7(2)]로 정렬된다는 것입니다.
즉 , sort()는 정렬 과정에서 중복되는 요소의 자리가 바뀌는 (ex ) arr=[1,5(2),5(1),7(2),7(1)]) 불필요한 연산 과정이 포함될 수 있다는 것입니다.
무슨 알고리즘으로 구현되어 있길래 그럴까요 ?
Time Sort는 Insertion sort와 Merge sort를 결합하여 만든 정렬 알고리즘입니다. 최선의 시간 복잡도는 O(n) , 평균과 최악은 O(nlogn)입니다. 작은 데이터 배열에 대해선 insertion sort를 사용하고 크기가 커질 때 merge sort를 사용하는 알고리즘입니다.
> Tim Sort에 대한 자세한 설명
조금 더 보기 편하게 정리해주시면 안될까요