为什么我不能在下面的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);
}
}
答案 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基础并填补未知的信息漏洞。但是,即使是基础知识,获得更多知识也永远不会受到伤害。
我也建议您使用“严格使用”;从开发开始就可以保持脚本更整洁,避免出现错误源。