Что происходит внутри, когда вы делаете var sum=sum||5;
это:
- переменная
sum
определена, она создается,
- переменная
sum
присваивается undefined
значение
- переменная
sum
присваивается результат из sum || 5
, что является выражением undefined || 5
, что составляет 5
Когда вы просто делаете sum = sum||5
, первый и второй шаги сверху не выполняются, поэтому на третьем шаге вы замыкаете то, что не существует на всех со значением 5
, и именно поэтому вы получаете эту ошибку.
Чтобы это понять, сделайте следующее: Откройте консоль своего браузера и просто напишите sum
. Вы получите сообщение об ошибке, потому что sum
не существует. Теперь сделаем sum = ''
. Здесь произошло изменение/sum
, , как если бы вы сделали var sum
, он существует, и ему было присвоено значение ''
.
Суть выше, что вы должны понимать, что есть разница между короткого замыкания значение undefined
со значением 5
и закорачивания то, что не существует со значением 5