javascript - 我不明白一个简单的 JavaScript 'while loop'

标签 javascript while-loop

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

以下代码:

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

在控制台上生成了 2,我不知道为什么。我尝试在 Eclipse JaveEE 上运行它,结果发现使用带有此代码的 HTML 文件作为脚本会得到不同的结果:空白页。

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

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

codeacademy console output

最佳答案

您观察到的行为是因为浏览器控制台就是这样工作的。

对于您评估的每个代码,它都会尝试返回一些值。对于简单的表达式,这很简单 - 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() 以防万一您想要获得结果。

关于javascript - 我不明白一个简单的 JavaScript 'while loop',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954848/

相关文章:

javascript - While 循环和innerHTML - 为什么它会反向显示数字?

C 编程 While 循环赋值

c++ - while(--i); 之间有什么区别?而 while(i) --i;?

javascript - 使用 createJS 获取对容器的缓存版本的引用

perl - 打印后的一段时间在 Perl 中是什么意思?

javascript - Jquery对具有特定attr值的所有元素的值求和

javascript - 使用javascript for循环将日期减少一天?

python - 如果条件为 False,则重新启动循环并编辑原始列表

javascript - 有没有办法在 Django 中显示登录错误?

javascript - Ajax 调用总是以 Undefined 的形式返回并且没有到达后面的代码