Because this.array.splice(0, 0, 10); will return a new array(containing the removed elements - in this case an empty array since no element is removed) not the source array on which it was called on.
In your case you are using a clone of the original array, so you are loosing the reference to the cloned instance.
So this.array.slice(0) will return a clone on which the .splice(0, 0, 10) is performed(it will update the cloned object) but the splice operation will return a new array(with removed objects) not the cloned instance so we looses reference to it
So the solution is to use a temp reference like
var tmp = this.array.slice(0);
tmp.splice(0, 0, 10)
sliceinvocation, so you can't see it.splicerun on cloned instance without creating additional arrays?