为什么我不能在下面的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);
}
}
如果你在{ }
中定义一个变量。这意味着变量只存在于{ }
内部。它被称为范围。
你有一个范围使用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);
}
}
在第一个代码片段中,您在for循环块中声明factorials
,因此它不会在for循环块之外可见。
它正在第二个片段中工作,因为你在块之外声明了它。
为什么我不能在下面的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.")
是的,你可以,但是如果你在循环中声明factorials-array它只能在那个闭包中使用。所以从循环中安慰它是行不通的。
这是一篇关于闭包的非常有益的文章:https://javascript.info/closure
整个javascript.info-site非常有趣,我现在正在研究它以加强我的javascript基础并填充未知的信息漏洞,虽然我从事网络开发多年。但是,获得更多知识永远不会伤害,即使它是基础知识。
另外我建议你使用“use strict;”从开始开始,它有助于保持脚本更清洁,不允许错误来源。