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

问题描述 投票:0回答:4

为什么我不能在下面的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);
    }
  }
javascript for-loop
4个回答
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);
    }
  }

0
投票

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

它正在第二个片段中工作,因为你在块之外声明了它。


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.")

0
投票

是的,你可以,但是如果你在循环中声明factorials-array它只能在那个闭包中使用。所以从循环中安慰它是行不通的。

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

整个javascript.info-site非常有趣,我现在正在研究它以加强我的javascript基础并填充未知的信息漏洞,虽然我从事网络开发多年。但是,获得更多知识永远不会伤害,即使它是基础知识。

另外我建议你使用“use strict;”从开始开始,它有助于保持脚本更清洁,不允许错误来源。

© www.soinside.com 2019 - 2024. All rights reserved.