Инициализация переменных в Javascript

Есть что-то, чего я не мог понять. У меня есть следующий код, целью которого является получение суммы двух массивов.

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}`);
  • Когда я попытался напечатать результат, он напечатал «NaN» для всех переменных (r1, r2 и total).
  • Однако после того, как я инициализировал r1 и r2. Это вернуло желаемый результат.
let r1 = 0;
let r2 = 0;
let total;

Мой вопрос: почему r1 и r2 не могут получить сумму массивов без инициализации? А переменная total могла получить результат r1 и r2, даже если она не была инициализирована?

попробуй console.info(undefined+1) . инициализация без значения дает неопределенность. total работает без инициализации, потому что вы не добавляете, а переназначаете значение

cmgchess 30.04.2023 09:31

Просто к вашему сведению, вы можете удалить одну из петель (при условии, что вы знаете, что они обе одного размера) и просто сделать for(let i = 0; i < arr1.length; i++) { total += arr1[i] + arr2[i]; }

Jhecht 30.04.2023 09:40

Потому что с r1 += ... вы делаете undefined + 1 в самой первой итерации, и это NaN. Когда вы назначаете total = r1 + r2, вы присваиваете результат r1 +r2 сумме и заменяете любое предыдущее значение.

derpirscher 30.04.2023 09:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
86
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

когда вы определяете переменную без присвоения значения, ее значение по умолчанию "не определено". в этом случае вы пытаетесь выполнить математику с числом и неопределенным значением, которое преобразуется в NaN

Хотя это правильно, это не ответ на вопрос ОП.

derpirscher 30.04.2023 10:01
Ответ принят как подходящий

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

Другие вопросы по теме