Javascript中的奇怪循环行为

3
这可能非常基础,但我还是有些困惑。如果我在浏览器中运行以下函数:
function bar(){
    var userInput=prompt("Enter a number between 1 and 20");
    if(userInput>=1 && userInput<=20){          
        var x=Number(userInput)+15;
        for(var i=0;i<x;i++){
            console.log("<br> blah. x=" + x );               //line1
            //console.log("<br> blah. x=" + x + " i=" + i ); //line2            
        }
    } else {
        console.log("Invalid number; please try again");
    }
}   

当我提供数值5时,意外地得到以下一行输出:
<br> blah. x=20

如果我使用相同的值,但注释掉第一行并取消注释第二行,我会得到以下(预期的)输出:
<br> blah. x=20 i=0
<br> blah. x=20 i=1
<br> blah. x=20 i=2
<br> blah. x=20 i=3
<br> blah. x=20 i=4
<br> blah. x=20 i=5
<br> blah. x=20 i=6
<br> blah. x=20 i=7
<br> blah. x=20 i=8
<br> blah. x=20 i=9
<br> blah. x=20 i=10
<br> blah. x=20 i=11
<br> blah. x=20 i=12
<br> blah. x=20 i=13
<br> blah. x=20 i=14
<br> blah. x=20 i=15
<br> blah. x=20 i=16
<br> blah. x=20 i=17
<br> blah. x=20 i=18
<br> blah. x=20 i=19

为什么会这样呢?显然有原因。提前感谢您的帮助。

你有检查过是否有任何错误吗?你能否创建一个 Stack Snippet 并展示工作行为或期望行为? - Praveen Kumar Purushothaman
或者控制台显示相同的行(20次)? - gurvinder372
它按预期工作,控制台日志只是显示相同的内容20次,以便进行分组。 - Alexander Lallier
4个回答

10

如果我理解正确,控制台会显示:

preview

这意味着同一行重复了20次。看到前面的数字20了吗?这样更容易理解,因此控制台会将所有类似或相同的响应分组,并在左侧显示数字。


1
啊!谢谢!我正在使用Firefox,而20在控制台窗口的最右侧。我曾经以为自己疯了一样。总是有原因的。也感谢其他回复。 - JL_SO
@JL_SO 啊,控制台标准——Firebug vs. Firefox vs. Chrome。它们只是为了让我们感到困惑,不是吗?:D - Praveen Kumar Purushothaman

1

您看到的只有一行是因为您的浏览器开发者工具的行为,如果以下所有内容都相同,则会显示为一行。

它看起来像这样:

注意日志前面的“20”。


1
有趣的是,成功的措辞可以引起比仅仅先发表(如我所做的,见@Praveen的回答,他比我晚了4秒 :))更多的赞同。 - nicael
没错,你得到了我的。你是第一个。不错。:D 我相信一开始你没有添加图片。:) - Praveen Kumar Purushothaman
1
@PraveenKumar 那是Safari :) - nicael
啊...我本来期望看到一些浏览器。:) 你正在使用另一个版本的Internet Explorer - 嗯,Mac版的Internet Explorer! :P - Praveen Kumar Purushothaman
1
@Praveen - nicael
显示剩余5条评论

0

当您的循环运行时,每次增加1个i,X将始终评估为20


1
这个回答跟问题有什么关系吗? - Praveen Kumar Purushothaman
如果它总是评估为20,每个循环都会给出相同的结果。您只能看到用户正在经历的内容。当用户登录时,控制台将显示每个增量。我的答案需要详细说明。但你可能已经猜到了 ;) - strawberrybeard
好的,把那些细节加入答案中是明智的。 - Praveen Kumar Purushothaman

0

我们的控制台已经将相似的输出分组。很可能在输出旁边有一个19。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接