Как об использовании каких-либо разрывов вообще, никаких флажков отмены и никаких дополнительных проверок условий. Эта версия просто взрывает переменные цикла (делает их Number.MAX_VALUE
), когда условие встречается, и заставляет все петли прекращать элегантно.
// No breaks needed
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (condition) {
console.log("condition met");
i = j = Number.MAX_VALUE; // Blast the loop variables
}
}
}
Был найден аналогичный ответ для вложенного типа типа декрементирования петли, но это работает для вложенных циклов инкрементного типа, не требуя рассмотрения значения конца цикла для простых циклов.
Другой пример:
// No breaks needed
for (var i = 0; i < 89; i++) {
for (var j = 0; j < 1002; j++) {
for (var k = 0; k < 16; k++) {
for (var l = 0; l < 2382; l++) {
if (condition) {
console.log("condition met");
i = j = k = l = Number.MAX_VALUE; // Blast the loop variables
}
}
}
}
}
Вот как интерпретируется ваш фрагмент кода:
function Test() {}
let tmp = function() {
console.log(this)
}
tmp.call(Test)(function() {
console.log(this)
}).call(Test)
Чтобы исправить это, добавьте точку с запятой после tmp.call(Test)