我不知道';我不懂简单的JavaScript';while循环';

我不知道';我不懂简单的JavaScript';while循环';,javascript,while-loop,Javascript,While Loop,我目前正在上学习JavaScript,在while循环部分的末尾 以下代码: j = 0; while (j < 3) { j++; } j=0; 而(j

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

以下代码:

j = 0;
while (j < 3) {
    j++;
}
j=0;
而(j<3){
j++;
}
在控制台上生成一个
2
,我不知道为什么。我试着在Eclipse上运行这个程序,结果发现使用HTML文件和这个代码作为脚本会得到一个不同的结果:一个空白页面

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

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


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

对于您计算的每个代码,它都会尝试返回一些值。对于简单的表达式很容易-
2+2
可能会返回
4

对于由多个语句组成的代码来说,它要复杂得多,console试图做到智能化。更为复杂的是,控制台的行为没有标准化,因此我们目前观察到的给定浏览器的行为不一定适用于其他浏览器或同一浏览器的其他版本

让我们看看发生了什么:

j = 0;
while (j < 3) {
    j++;
}
出于同样的原因,输出将是3

现在让我们尝试一些不同的方法:

j = 0;
while (j < 3) {
    j++;
    a = 42;
}
对于这个示例,它将再次返回
2
,因为console决定忽略赋值语句并返回到最新的表达式


总而言之:这种行为并不是标准化的,浏览器只是试图变得有用并输出一些东西,即使它不是您期望的那样。因此,我的建议是不要依赖隐式控制台输出,而是显式使用
console.log()
,以防您想要得到结果。

这是完整的代码吗?您在某个点返回2,因此它出现了。while循环没有可在console上打印的console语句。代码中的console.log()语句在哪里?它只是一个返回最后一个表达式值的控制台。这种行为非常棘手,所以现在最好不要去想它。@virendrao不应该有一个控制台-控制台在每种情况下都会输出一些值。也许codeacademy控制台会接受最后一句话的值。执行最后一个
j++
时,表达式本身的计算结果为2,因为对增量后运算符的计算结果返回增量前的变量值。执行后,
j
等于3,但最后一句的计算值为2。控制台并没有真正尝试做任何聪明的事情。它只是给出正在执行的
eval()
的结果。@斜视不需要返回
eval()
的结果。顺便说一句,在浏览器中看到相应的实现会很奇怪。是的,我并不是说他们必须这样做。我只是说,这是他们正在做的(很可能无论如何),而不是试图执行聪明的分析技巧。源代码会很有趣。
j = 0;
while (j < 3) {
    j++;
    a = 42;
}
j = 0;
while (j < 3) {
    j++;
    var a = 42;
}