【发布时间】:2021-04-28 04:41:14
【问题描述】:
我写了另一个答案。但我不明白这一点。
.. 虽然,我运行 chrome 调试器,但我不能很好地理解。
result = true
// is passed
我不太明白。我提交了另一个答案,但我想知道为什么它只是通过了。 我需要更多解释,我想从这段代码中修复。
function isPrime(num) {
let result;
for(let i = 1 ; i <= num ; i++) {
if(num[i] / num[i] === 1 && num[i] / num[i] === num[i]){
result = true
} else {
result = false
}
}
return result
}
debugger;
let output = isPrime(2);
console.log(output); // --> true
output = isPrime(6);
console.log(output); // --> false
output = isPrime(17);
console.log(output); // --> true
【问题讨论】:
-
这绝对不是一个判断一个数是否为素数的有效函数。
result在 i 的每次迭代中都会被覆盖,这意味着只有最后一次迭代/测试很重要。这是不对的 -
@ControlAltDel overwritten... 为什么会被覆盖?是什么原因造成的?
-
“为什么它被过度使用了?”因为您在每次迭代中都在更改 result
-
关于您在调试时观察到的行为,在屏幕截图中您处于循环的第一次迭代中(即
i设置为1)。执行在第 7 行停止,这表明else块正在执行。 这意味着第 5 行的赋值被跳过了,这就是为什么result仍然包含值undefined。 在调试器中的另一个步骤之后,一旦执行第 7 行中的语句,result将然后分配值false。
标签: javascript if-statement scope closures