this keyword, it depends on the type of data you store in a variable.
In your code
this._songs is an array, which is not a primitive type, hence it was stored by reference. It means that when you assigned
remainSongs, there was no copy of the original array created in the memory. Another simple example:
let numbers = [1, 2, 3, 4]
let newNumbers = numbers
console.log(numbers) // [ 1, 2, 3, 4 ]
console.log(newNumbers) // [ 1, 2, 3, 4 ]
Both variables point to the same place in memory, that’s why by modifying one of them you will actually modify both.
console.log(numbers) // [ 1, 2, 3, 4, 5 ]
console.log(newNumbers) // [ 1, 2, 3, 4, 5 ]