Использование оператора Break против раннего возврата при выходе из цикла for-of Loop в JavaScript - PullRequest
0 голосов
/ 05 июня 2019

У меня есть цикл for of, где мне нужно выйти, если нет результирующих значений. Мне приходит в голову, что я мог бы использовать ранний оператор return для обработки этого или использовать оператор break. Для ясности, в этом случае нет никакого дополнительного кода для выполнения WITHIN в этом блоке кода после части, которую я пропускаю, поэтому я предполагаю, что любой из них будет работать здесь (break или return). Есть ли какая-либо функциональная или производительная причина для использования одного над другим в данном конкретном случае?

ВАРИАНТ 1: (перерыв)

  for (let diff of differences) {
    if (!diff.path) break;

    if (diff.path[0] !== "updatedAt") {
      const docChange = new ChangedProp(doc, diff, lastEditedBy, "customer");
      docChange.log();
    }
  }

ВАРИАНТ 2: (возврат)

  for (let diff of differences) {
    if (!diff.path) return;

    if (diff.path[0] !== "updatedAt") {
      const docChange = new ChangedProp(doc, diff, lastEditedBy, "customer");
      docChange.log();
    }
  }

1 Ответ

4 голосов
/ 05 июня 2019

Есть ли какая-либо функциональная или производственная причина для использования одного над другим в данном конкретном случае?

Нет, если мы предположим, что цикл for-of является последним в функции, содержащей его. Могут быть аргументы стиля, так или иначе, но не по функциональным причинам или по причине производительности.

Очевидно, что если после кода *1000* есть цикл for-of, то использование break приведет к запуску этого кода, а использование return приведет к пропуску этого кода. Это существенная функциональная разница:

function a(array) {
  for (const value of array) {
    if (value % 2 == 0) {
      break;
    }
  }
  console.log("This line gets reached");
}
function b(array) {
  for (const value of array) {
    if (value % 2 == 0) {
      return;
    }
  }
  console.log("This line does NOT get reached");
}

const arr = [1, 2, 3];
a(arr);
b(arr);

В этом примере код в a и b одинаков, за исключением того, что a использует break, а b использует return (и текст, записанный в конце, немного отличается) .

Без этого console.log после цикла функциональной разницы нет.

...