为什么不能在for循环中声明变量?

时间:2019-01-17 10:05:56

标签: javascript for-loop

为什么我不能在下面的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 :(得分:0)

如果您在{ }内定义变量。这意味着该变量仅在{ }内部有效。这叫做范围。

您使用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);
    }
  }

答案 1 :(得分:0)

在第一个代码段中,您声明factorials在for循环块内,因此在for循环块外不可见。

它在第二个代码段中起作用,因为您在代码块之外声明了它。

答案 2 :(得分:0)

  

为什么我不能在下面的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.")

答案 3 :(得分:0)

是的,可以,但是如果在循环中声明阶乘数组,则仅在该闭包中可用。因此,将其从循环中解脱是行不通的。

这是关于闭包的非常有用的文章: https://javascript.info/closure

整个javascript.info网站非常有趣,尽管我多年来从事网络开发,但我现在正在研究它以增强我的javascript基础并填补未知的信息漏洞。但是,即使是基础知识,获得更多知识也永远不会受到伤害。

我也建议您使用“严格使用”;从开发开始就可以保持脚本更整洁,避免出现错误源。