为什么这个程序打印3而不是2?

时间:2018-06-01 09:43:43

标签: javascript

我目前正在学习JavaScript,现在我正在讨论letvar之间的差异。

有人可以解释为什么这段代码打印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

5 个答案:

答案 0 :(得分:0)

因为你有这条线

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

i的增量值,i是全局变量,当您致电printNumTwo i时,由于循环增量i

,值达到3

答案 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