plu*_*ily 4 javascript while-loop
我目前正在学习Code Academy上的JavaScript,而我正处于while循环部分的末尾.
以下代码:
j = 0;
while (j < 3) {
j++;
}
Run Code Online (Sandbox Code Playgroud)
2在控制台上产生一个,我不知道为什么.我尝试运行它Eclipse JaveEE只是为了意识到使用带有此代码的HTML文件作为脚本给我一个不同的结果:一个空白页面.
这对我来说很有意义,因为我只是增加j了3,但没有打印出来.不知道为什么CodeAcademy控制台给了我一个2.
这是控制台输出的屏幕截图:

您正在观察的行为是因为这是浏览器控制台的工作方式.
对于您评估的每个代码,它会尝试返回一些值.对于琐碎的表达式来说,这很容易 - 2 + 2可能会回归4.
对于由多个语句组成的代码,它要复杂得多,并且控制台试图变得聪明.更复杂的是,控制台的行为不是标准化的,所以我们在这个时刻对于给定的浏览器所观察到的并不能保证适用于另一个浏览器或同一个浏览器的另一个版本.
让我们试着找出发生了什么:
j = 0;
while (j < 3) {
j++;
}
Run Code Online (Sandbox Code Playgroud)
为此代码浏览器尝试智能并输出最新找到的表达式的值,在这种情况下是j++;.它返回,2因为这是j循环终止前的最后一次迭代的值.并且由于后缀增量在修改之前返回当前值 - 它返回2.
如果我们改变它
j = 0;
while (j < 3) {
++j;
}
Run Code Online (Sandbox Code Playgroud)
出于同样的原因,输出将是3.
现在让我们尝试不同的东西:
j = 0;
while (j < 3) {
j++;
a = 42;
}
Run Code Online (Sandbox Code Playgroud)
这会输出42.由于这a = 42是此代码中的最新表达式.
j = 0;
while (j < 3) {
j++;
var a = 42;
}
Run Code Online (Sandbox Code Playgroud)
对于此示例,它将再次返回2,因为控制台决定忽略赋值语句并恢复为最新的表达式.
总结一下:这种行为不是标准化的,浏览器只是尝试有用并输出一些东西,即使它不是你期望的那样.因此,我的建议是不依赖于隐式控制台输出,并console.log()在您想要获得结果时使用显式.
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |