繁体   English   中英

我不明白一个简单的JavaScript'while循环'

[英]I don't understand a simple JavaScript 'while loop'

我目前正在学习Code Academy上的JavaScript,而我正处于while循环部分的末尾。

以下代码:

j = 0;
while (j < 3) {
    j++;
}

在控制台上生成2 ,我不知道为什么。 我尝试在Eclipse JaveEE上运行它只是为了意识到使用带有此代码的HTML文件作为脚本给我一个不同的结果:一个空白页面。

这对我来说很有意义,因为我只将j增加到3 ,但不打印它。 不知道为什么CodeAcademy控制台给了我一个2。

这是控制台输出的屏幕截图:

codeacademy控制台输出

您正在观察的行为是因为这是浏览器控制台的工作方式。

对于您评估的每个代码,它会尝试返回一些值。 对于琐碎的表达式来说很简单 - 2 + 2可能会返回4

对于由多个语句组成的代码,它要复杂得多,并且控制台试图变得聪明。 更复杂的是,控制台的行为不是标准化的,所以我们在这个时刻对于给定的浏览器所观察到的并不能保证适用于另一个浏览器或同一个浏览器的另一个版本。

让我们试着找出发生了什么:

j = 0;
while (j < 3) {
    j++;
}

为此代码浏览器尝试智能并输出最新找到的表达式的值,在这种情况下是j++; 它返回2因为这是循环终止前最后一次迭代的j的值。 并且由于后缀增量在修改之前返回当前值 - 它返回2

如果我们改变它

j = 0;
while (j < 3) {
    ++j;
}

出于同样的原因,输出将是3。

现在让我们尝试不同的东西:

j = 0;
while (j < 3) {
    j++;
    a = 42;
}

这将输出42 由于a = 42是此代码中的最新表达式。

j = 0;
while (j < 3) {
    j++;
    var a = 42;
}

对于此示例,它将再次返回2 ,因为控制台决定忽略赋值语句并恢复为最新的表达式。

总结一下:这种行为不是标准化的,浏览器只是尝试有用并输出一些东西,即使它不是你期望的那样。 因此,我的建议是不依赖于隐式控制台输出,并在您想要获得结果时显式使用console.log()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM