Результат кажется странным только до тех пор, пока вы не увидите реализацию reduce
, особенно этот оператор перед началом цикла:
if(arguments.length <= 1) {
curr = this[0]; // Increase i to start searching the secondly defined element in the array
i = 1; // start accumulating at the second element
}
Имеет смысл сейчас.И extend
носит динамический характер, поэтому он будет принимать все, что вы ему дадите (не только два аргумента, которые вам действительно нужны).