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

Javascript 为什么这个程序打印3而不是2?,javascript,Javascript,我目前正在学习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 v

我目前正在学习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
vari;
函数printNumTwo(){
返回i;
}
对于(i=0;i<3;i++){
如果(i==2){
printNumTwo();
}
}
打印(printNumTwo());//印刷品3

因为你有这一行

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

i的哪个增量值,i是全局变量,当您调用
printNumTwo
i
时,由于循环增量
i
值当
i
为2时,您不会打印任何内容,只有在调用
print
时,循环才会停止。当
i
变为3时,循环才会停止

要让它打印2,您必须更改
printNumTwo()
函数,如下所示:

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

for (i = 0; i < 3; i++) {
    if(i === 2) {
    printNumTwo();
    }
}
vari;
函数printNumTwo(){
印刷品(一);
}
对于(i=0;i<3;i++){
如果(i==2){
printNumTwo();
}
}
当您
print(printNumTwo())
i为3时。在if语句中调用
printNumTwo()
只返回i,而i没有被任何东西使用


因此,基本上for语句运行并完成i=3,然后打印方法使用i。

您必须使用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());
vari;
函数printNumTwo(){
返回i;
}
for(设j=0;j<3;j++){
i=j;
如果(i==2){
printNumTwo();
}
}
log(printNumTwo());

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

var i;

function printNumTwo() {
        return i;
}

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

document.write(printNumTwo()); // prints 2
vari;
函数printNumTwo(){
返回i;
}
对于(i=0;i<3;i++){
如果(i==2){
打破
printNumTwo();
}
}
document.write(printNumTwo());//打印2

因为
i
是一个全局变量,对于循环,它已被增加到3个post。您将i增加到3,printNumTwo只返回i的值,因此它将打印3。为了澄清这一点,当
i
变为2时,循环不会停止执行。当
i
变为3时,循环会停止。