代码示例A
var isPrime = function (num) {
//for(i = 1; i <= num; i++) {}
if(num === 2){
return true;
}
return false;
};
var sumPrimesUpTo = function (num) {
for(i = 1; i <= num; i++) {
console.log(isPrime(i));
}
};
sumPrimesUpTo(5);
因此,我们有一个函数应该检查素数,而第二个函数将素数加起来等于提供的数。运行此命令时,它将输出。
false
true
false
false
false
现在我们有相同的代码示例,但是isPrime中的for循环未注释。
var isPrime = function (num) {
for(i = 1; i <= num; i++) {}
if(num === 2){
return true;
}
return false;
};
var sumPrimesUpTo = function (num) {
for(i = 1; i <= num; i++) {
console.log(isPrime(i));
}
};
sumPrimesUpTo(5);
此输出
false
false
false
我似乎不明白为什么for循环会更改输出?
答案 0 :(得分:5)
i
是全局范围的,应该使用let
来保持i
的范围是for
的循环。
您也可以使用var
,但是let
是更好的选择,因为它会为您提供所需的范围,并且不允许在此块中重新分配它。
var isPrime = function (num) {
for(let i = 1; i <= num; i++) {}
if(num === 2){
return true;
}
return false;
};
var sumPrimesUpTo = function (num) {
for(let i = 1; i <= num; i++) {
console.log(isPrime(i));
}
};
sumPrimesUpTo(5);