Почему я не могу объявить переменную внутри цикла for? - PullRequest
0 голосов
/ 17 января 2019

Почему я не могу объявить переменную внутри цикла for ниже?

Неправильно:

  for(let i = 1; i <= num; i++){
    let factorials = [];
    if(num % i === 0){
      factorials.push(i);
    }
  }
// ReferenceError: factorials is not defined

Правильно:

  let factorials = [];
  for(let i = 1; i <= num; i++){
    if(num % i === 0){
      factorials.push(i);
    }
  }

Ответы [ 4 ]

0 голосов
/ 17 января 2019

Да, вы можете, но если вы объявите массив factorials в цикле, он будет доступен только в этом замыкании. Так что утешить его из цикла не получится.

Вот очень информативная статья о замыканиях: https://javascript.info/closure

Весь сайт javascript.info очень интересный, сейчас я изучаю его, чтобы усилить основы моего javascript и заполнить неизвестные информационные дыры, хотя я занимаюсь веб-разработкой уже много лет. Но никогда не помешает получить больше знаний, даже если это основа.

Также я бы посоветовал вам использовать «используйте строгий»; С самого начала разработки он помогает поддерживать чистоту ваших сценариев, не допуская источников ошибок.

0 голосов
/ 17 января 2019

В первом фрагменте кода вы объявляете factorials внутри блока цикла for, поэтому он не будет виден вне блока цикла for.

Он работает во втором фрагменте, потому что вы объявили его вне блока.

0 голосов
/ 17 января 2019

Почему я не могу объявить переменную внутри цикла for ниже?

Нет, вы можете.

Вот доказательство.

let num = 5;

for (let i = 1; i <= num; i++) {
  let factorials = [];
  if (num % i === 0) {
    factorials.push(i);
  }
}

let factorials = [];
for (let i = 1; i <= num; i++) {
  if (num % i === 0) {
    factorials.push(i);
  }
}

console.log("No Error.")
0 голосов
/ 17 января 2019

Если вы определяете переменную внутри { }. Это означает, что переменная жива только внутри { }. Это называется областью действия.

У вас есть область действия, использующая if/while/for/function ...

В следующем примере переменная factorials активна только внутри одной итерации цикла for. Это означает, что вы каждый раз создаете переменную factorials.

  for(let i = 1; i <= num; i++){
    const factorials = [];

    if(num % i === 0){
      factorials.push(i);
    }
  }

Если вы хотите, чтобы она работала, вам нужно создать свою переменную вне for, чтобы она не воссоздалась после каждой итерации и сохраняла ее значения.

  const factorials = [];

  for(let i = 1; i <= num; i++){
    if(num % i === 0){
      factorials.push(i);
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...