Я немного смущен знаком + =. Как это работает?
-  1 += 2//равно?
-  и этот var data = [1,2,3,4,5]; var sum = 0; data.forEach(function(value) { sum += value; }); sum = ?
Я немного смущен знаком + =. Как это работает?
 1 += 2//равно?
и этот
var data = [1,2,3,4,5];
var sum = 0;
data.forEach(function(value) {
    sum += value; 
});
sum = ?
 1 += 2 является синтаксической ошибкой (левая сторона должна быть переменной).
 x += y является сокращением для x = x + y.
1) 1 + = 2//равно?
Это синтаксически недействительно. Левая сторона должна быть переменной. Например.
var mynum = 1;
mynum += 2;
// now mynum is 3.
 mynum += 2; является лишь короткой формой для mynum = mynum + 2;
2)
var data = [1,2,3,4,5];
var sum = 0;
data.forEach(function(value) {
    sum += value; 
});
Сумма теперь равна 15. Развертывание forEach у нас:
var sum = 0;
sum += 1; // sum is 1
sum += 2; // sum is 3
sum += 3; // sum is 6
sum += 4; // sum is 10
sum += 5; // sum is 15
Это всего лишь короткая форма для:
sum = sum + value;
 += в JavaScript (как и во многих других языках) добавляет правую сторону к переменной с левой стороны, сохраняя результат в этой переменной. Поэтому ваш пример 1 +=2 не имеет смысла. Вот пример:
var x = 5;
x += 4; // x now equals 9, same as writing x = x + 4;
x -= 3; // x now equals 6, same as writing x = x - 3;
x *= 2; // x now equals 12, same as writing x = x * 2;
x /= 3; // x now equals 4, same as writing x = x / 3;
В вашем конкретном примере цикл суммирует числа в массиве data.
 += используется для конкатенации строк или добавления чисел.
Он увеличит вашу суммарную переменную с суммой рядом с ней.
var sum = 0;
var valueAdded = 5; 
sum += valueAdded;
sum = 5
Вы должны знать, что:
Синтаксис операторов присваивания: variable = expression;
По этой причине 1 += 2 → 1 = 1 + 2 не является допустимым синтаксисом, так как левый операнд не является переменной. Ошибка в этом случае равна ReferenceError: invalid assignment left-hand side.
 x += y - это короткая форма для x = x + y, где x - переменная и x + y выражение.
Результат суммы 15.
      sum = 0;
      sum = sum + 1; // 1
      sum = sum + 2; // 3
      sum = sum + 3; // 6
      sum = sum + 4; // 10
      sum = sum + 5; // 15
Другие оператор присваивания работают так же (относительно стандартных операций, на которые они ссылаются). .
... и не забывайте, что происходит при смешивании типов:
x = 127;
x += " hours "
// x is now a string: "127 hours "
x += 1 === 0;
// x is still a string: "127 hours false"
 a += b является сокращением для a = a +b, что означает:
1) 1 += 2//не будет компилировать
2) 15
 x+=y является сокращением на многих языках для set x to x + y. Сумма будет, как намечено ее именем, суммой чисел в data.
NO 1+=2!=2 это означает
вы добавите 1+2.
Но это даст вам синтаксическую ошибку.
Предположим, что переменная имеет тип int int a=1;
тогда
a+=2; означает a=1+2; и увеличить значение a от 1 до 3.
Как говорили все выше
var str = "foo"
str += " bar"
console.log(str) //will now give you "foo bar"
Проверьте это также https://www.sitepoint.com/shorthand-javascript-techniques/
что только сокращенная нотация на большинстве языков. Это означает, что
х = х + 1;
мы можем выполнить ту же операцию для x = 1, x * = 1, x/= 1; что означает