Обрабатывает ли For-l oop функцию внутри выражения до тех пор, пока не закончится l oop? - PullRequest
0 голосов
/ 25 марта 2020
var x = myFunction(y);
for (let index = 0; index < x; index++) {
  //do something
}

Вопрос: x внутри выражения l oop должен запускать myFunction при каждом цикле, чтобы получить значение для x ?

Если так, то было бы лучше (или важно) просто написать For-l oop как:

for (let index = 0; index < myFunction(y); index++) {
  //do something
}

Ответы [ 3 ]

2 голосов
/ 25 марта 2020

Нет, функция вызывается только при явном вызове с myFunction(y). После его вызова возвращаемое значение сохраняется в переменной x. Затем внутри l oop на каждой итерации происходит только то, что существующая переменная x сравнивается с index.

Ваш первый код более эффективен.

Ссылка на переменную сама по себе приведет к вызову функции и возможным побочным эффектам, только если переменная является свойством глобального объекта и является геттером:

Object.defineProperty(window, 'foo', {
  get () {
    console.log('function running');
  }
});

foo;
foo;
foo;

Это чрезвычайно необычно.

0 голосов
/ 25 марта 2020

Хороший вопрос. Давайте проверим это и выясним.

var counter = 10;

var x = myFunction();

for (let index = 0; index < x; index++) {
  console.log('index: '+index);
}

function myFunction(){
  counter--;
  return counter;
};

Нет. Похоже, что х оценивается один раз.

0 голосов
/ 25 марта 2020

Ответ - нет , потому что JavaScript сначала оцените значение myFunction (y) , затем присвойте его x, а затем перейдите к значению l oop.

Дополнительная информация

Вместо этого будет да, если эта инструкция var z = myFunction (y) была внутри for-l oop

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