Ну а что по вашему хранится в var result ? 123? 0? 42?
Javascript и так не строго-типизированный язык, а вы сейчас хотите чтобы он догадался что вы будете хранить в данной переменной. И так к слову - += для чисел это операция сложения(наращивания), а для строк - конкатенация. Вы что хотите сделать?
ZifeRRoT: если вы напишете result = callback(i);, то да. Но вы написала операцию += , а это значит "к текущему значению добавить результат вызова". И тут вопрос - что есть "текущее значение"? Вы его никак не задали. ни нулем, ни пустой строкой. Соответственно получаете undefined и неопределенное поведение