我目前正在学习JavaScript,现在我正在讨论let
和var
之间的差异。
有人可以解释为什么这段代码打印3而不是2?当i
变为2时,循环应该停止执行,i
如何达到3的值?
var i;
function printNumTwo() {
return i;
}
for (i = 0; i < 3; i++) {
if(i === 2) {
printNumTwo();
}
}
print(printNumTwo()); // prints 3
答案 0 :(得分:0)
因为你有这条线
for (i = 0; i < 3; i++) {
i的增量值,i是全局变量,当您致电printNumTwo
i
时,由于循环增量i
值
答案 1 :(得分:0)
当i
为2时,您不会打印任何内容,只有在您调用print
时循环之后。当i
变为3时,循环停止。
要打印2,您必须更改printNumTwo()
功能,如下所示:
var i;
function printNumTwo() {
print(i);
}
for (i = 0; i < 3; i++) {
if(i === 2) {
printNumTwo();
}
}
答案 2 :(得分:0)
当你print(printNumTwo())
我是3.在if语句中调用printNumTwo()
除了返回i之外什么都没做。
所以基本上for语句运行并完成i = 3然后我的print方法使用它。
答案 3 :(得分:0)
您必须使用let关键字更改启动循环,因为var是一个全局变量,而let是块范围变量。这就是获得不同价值的原因。
您可以尝试
var i;
function printNumTwo() {
return i;
}
for (let j = 0; j < 3; j++) {
i = j;
if(i === 2) {
printNumTwo();
}
}
cosole.log(printNumTwo());
答案 4 :(得分:0)
尝试使用break语句它“跳出”循环并在循环后继续执行代码,如果指定的条件为真。
var i;
function printNumTwo() {
return i;
}
for (i = 0; i < 3; i++) {
if (i === 2) {
break;
printNumTwo();
}
}
document.write(printNumTwo()); // prints 2