Как выполняется JavaScript для l oop? - PullRequest
0 голосов
/ 18 января 2020

Код после для l oop выполняется перед для l oop сверху. Javascript выполняется синхронно, почему он выполняет строку после для l oop первым?

function solution(A) {
  let diff = [];

  for (let i = 1; i < A.length; i++) {
    let sum1 = 0;
    let sum2 = 0;

    for (let j = 0; j < i - 1; j++) {
      sum1 += A[j];
      console.log('Why this is executing later? ' + sum1);
    }

    for (let k = i; k < A.length; k++) {
      sum2 += A[k];
    }

    console.log('Why this is executing frist? ' + sum1);
    diff.push(Math.abs(sum1 - sum2));
  }

  return Math.min(...diff);
}

solution([1,2,3,4,5]);

Ответы [ 2 ]

5 голосов
/ 18 января 2020

При первом запуске внешнего l oop значение i будет 1. Ваш внутренний l oop проверяет, если j<i-1, а j начинается с 0. Поэтому при первом выполнении вашего внутреннего l oop он проверит, является ли 0 < 0, что ложно, и немедленно выйдет, а не выполнит внутренний l oop.

3 голосов
/ 18 января 2020

Ваша проблема в том, что код с вашим сообщением Why this is executing later не выполняется вообще при первом запуске внешнего l oop.

При вводе первого l oop при for(let i=1; i<A.length; i++){ i будет 1.

Теперь вы нажмете for(let j=0; j<i-1; j++){, но i-1 равно 1-1 (потому что i равно 1), и поэтому oop будет выполнено 0 раз. И поэтому Why this is executing later не будет выполнено.

Поэтому следующее console.log сообщение, которое будет выполнено, это сообщение с Why this is executing frist.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...