Есть что-то, чего я не мог понять. У меня есть следующий код, целью которого является получение суммы двух массивов.
let r1;
let r2;
let total;
function totalSum(arr_1, arr_2) {
for (let i = 0; i < arr_1.length; i++) r1 += arr_1[i];
for (let j = 0; j < arr_2.length; j++) r2 += arr_2[j];
total = r1 + r2;
return total;
}
let arr_1 = [3, 5, 22, 5, 7, 2, 45, 75, 89, 21, 2]; // --> 276
let arr_2 = [9, 2, 42, 55, 71, 22, 4, 5, 90, 25, 26]; // --> 351
totalSum(arr_1, arr_2);
console.info(`total=${total} r1=${r1} r2=${r2}`);r1, r2 и total).r1 и r2. Это вернуло желаемый результат.let r1 = 0;
let r2 = 0;
let total;
Мой вопрос: почему r1 и r2 не могут получить сумму массивов без инициализации? А переменная total могла получить результат r1 и r2, даже если она не была инициализирована?
Просто к вашему сведению, вы можете удалить одну из петель (при условии, что вы знаете, что они обе одного размера) и просто сделать for(let i = 0; i < arr1.length; i++) { total += arr1[i] + arr2[i]; }
Потому что с r1 += ... вы делаете undefined + 1 в самой первой итерации, и это NaN. Когда вы назначаете total = r1 + r2, вы присваиваете результат r1 +r2 сумме и заменяете любое предыдущее значение.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


когда вы определяете переменную без присвоения значения, ее значение по умолчанию "не определено". в этом случае вы пытаетесь выполнить математику с числом и неопределенным значением, которое преобразуется в NaN
Хотя это правильно, это не ответ на вопрос ОП.
Ответ в том, что вы добавляете r1 += arr_1[i];, что означает undefined+=arr_1[i] в первый раз. поскольку undefined нельзя добавить, он возвращает NaN для каждого добавления, выполненного с первого до последнего. Но в случае total вы присваиваете значение total=r1+r2, поэтому в этом случае, даже если сумма была undefined, она была переназначена другому значению, которое было r1 + r2. Короче говоря, вы не можете прибавлять к значению undefined, но вы можете назначить другую переменную значению undefined. Надеюсь, это ответит на вопрос.
попробуй
console.info(undefined+1). инициализация без значения дает неопределенность. total работает без инициализации, потому что вы не добавляете, а переназначаете значение