-1

我目前正在学习 JavaScript,现在我正在讨论一个主题,讨论letvar.

有人可以解释为什么这段代码打印 3 而不是 2 吗?当循环应该停止执行一次变为 2时,甚至如何i达到 3 的值?i

var i;
function printNumTwo() {
        return i;
}

for (i = 0; i < 3; i++) {
    if(i === 2) {
    printNumTwo();
    }
}

print(printNumTwo()); // prints 3
4

5 回答 5

0

因为你有这条线

for (i = 0; i < 3; i++) {

i 的哪个增量值,而 i 是全局变量,当您调用时printNumTwo i,由于循环增量i值,您的值达到了 3

于 2018-06-01T09:46:49.613 回答
0

i是 2 时,你没有打印任何东西,只有在循环之后是你调用print. i循环在变为 3时停止。

要让它打印 2,您必须printNumTwo()像这样更改函数:

var i;
function printNumTwo() {
        print(i);
}

for (i = 0; i < 3; i++) {
    if(i === 2) {
    printNumTwo();
    }
}
于 2018-06-01T09:48:37.390 回答
0

当你print(printNumTwo())i 是 3 时。在 if 语句中调用只会printNumTwo()返回不被任何东西使用的 i。

所以基本上 for 语句运行并完成 i=3 然后 i 被您的 print 方法使用。

于 2018-06-01T09:49:28.663 回答
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());
于 2018-06-01T10:04:45.140 回答
0

尝试使用 break 语句,如果指定条件为真,它会“跳出”循环并继续执行循环后的代码。

var i;

function printNumTwo() {
        return i;
}

for (i = 0; i < 3; i++) {
    if (i === 2) { 
    break; 
    printNumTwo();
    }
}

document.write(printNumTwo()); // prints 2
于 2018-06-01T10:22:24.447 回答