Javascript:编写for循环时,为什么会打印最后一个索引号?

标签 javascript for-loop interpreter

在 js 解释器中编写简单的 for 循环时,我会自动获取索引号的最后一个值(在本例中为 i)。

js> for (var i=0; i<100; ++i) { numbers[i]=i+1; }
100
js> i
100

有人可以解释一下为什么解释器会这样工作吗?我没有明确要求它打印 i 的值。

抱歉,伙计们,我的表述含糊不清,但我真的不知道如何描述正在发生的事情。

最佳答案

JavaScript 中的所有语句都有一个值,包括在循环结构中执行的 block 。执行循环 block 后,将返回最终值(如果没有发生任何操作,则返回 undefined)。隐式提供返回值“100”的语句是 numbers[i] = i+1; ,因为 i+1 的最终迭代产生 100,并且赋值操作返回被赋值的值。

console.log(hello = "World"); // outputs 'World'

现在,这并不是说您可以将 for 循环的结果分配给变量,而是解释器“看到”返回值并将其打印到控制台。

我还要补充一点,这是运行 eval 的结果在您的代码上:

eval('numbers = []; for(var i = 0; i < 100; i++){ numbers[i] = i+1; }')

关于Javascript:编写for循环时,为什么会打印最后一个索引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446706/

相关文章:

c++ - 为什么基于范围的 for 循环中的结构化绑定(bind)只是拷贝而不是引用?

python 解释器 : interrupt and continue

javascript - Charts.js 烛台(金融图表)在开始和结束时显示一半的柱

javascript - 如何使用 JS、Node.JS 和 Discord.JS 在 SQLITE 数据库中获取多行?

javascript - 具有 HTML 格式的 AngularJS 动态行生成

java - 跳过 for 循环中的元素并重新分配它

javascript - 客户端总是响应之前服务器发送的事件,而不是当前事件

javascript - 如何获取li标签内的属性值?

haskell - 是否可以在 GHCi 中定义新的 ADT

java - java解释器在逐行执行代码之前是否执行转换/翻译?