Компилятор выдал мне ошибку, когда я пытался:

['a', 'b', 'c'].forEach(function (x) {
   if (x == 'b') {
      break //error message: Can't have 'break' outside of loop
   }
})

Действительный синтаксис:

var x = ['a', 'b', 'c'];
for (var i = 0; i < x.length; i++) {
    if (x[i] == 'b') {
        break
    }
}

Итак, почему?

4
Tân 17 Дек 2015 в 18:47

4 ответа

Лучший ответ

forEach может заставить вас поверить, что вы находитесь в контексте цикла for, но это не так.

Это просто метод, который выполняется для каждого из элементов в массиве. Таким образом, внутри функции вы можете контролировать только текущую итерацию, но никоим образом не можете отменить или прервать подписку на метод для других элементов массива.

7
Wim Hollebrandse 17 Дек 2015 в 15:53

Это потому, что вы находитесь в функции. Ключевое слово break здесь недоступно (вне цикла)

0
Ludovic Feltz 17 Дек 2015 в 15:48

Объяснение вашего вопроса было хорошо дано @Wim Hollebrandse.

Если вы хотите разорвать цикл, попробуйте использовать некоторые вместо forEach:

['a', 'b', 'c'].some(function (x) {
  if (x == 'b') {
    return true; 
  }
});
1
Yaron Schwimmer 17 Дек 2015 в 16:00

Потому что это метод в массиве прототип.

Чтобы вырваться, брось исключение.

0
Koshinae 17 Дек 2015 в 15:50