js中for循环中i++写在代码块中和写在括号中的区别是什么?

描述

for循环是最基础的知识点,但是多年后发现我并没有吃透。
常规的写法大家都理解,就不说了;但是当把i++写在代码块中时,发现多执行了一次,这是为什么,哪位大神能否讲解下。

image.png
从上图中可以看出,结果多输出了一次。
另外第一次也是输出三次,但是最后一个是undefined的,开始我以为是i访问不到了,返回的undefined的,结果不是,看下面截图
image.png
我输出i的时候,加了个前缀,结果是没有的,说明输出的不是console.log的内容,说明这是for的输出,下面也证明了
image.png
直接一个空的for也有undefined

问题

  1. i++写在代码块中为什么会多执行一次?
  2. 那个undefined是从哪输出的?

补充

本来计算下面的情况,熬夜熬猛了,忘了等于的情况了,我说for怎么突然和我的理解不一致了[捂脸]

const aa = ["0", "1", "2", "3", "4", "5"];
for (let i = 0,len=aa.length; i < len; i = Math.min(i + 5, len)) {
  let list = aa.slice(i, i + 5);
  console.log(list);
}
阅读 1.9k
2 个回答

没有多执行吧,最后一个1是返回值

    在Node.js的交互式命令行中(其他编程语言比如Python),每次执行语句都会返回一个值,这是因为REPL (read-eval-print loop)在运行代码时自动将代码包裹在一个函数中并执行它,然后返回函数的返回值。它是一个简单的,交互式的编程环境,有时候翻译成交互式解释器。就是你往REPL里输入一行代码,它立即给你执行结果。而不用像C++, Java那样通常需要编译才能看到运行结果。
    如果你在REPL中输入一个表达式,比如 1+1,它将自动包裹在一个函数中并返回表达式的值。同样,如果你定义了一个函数并在REPL中调用它,该函数的返回值也会被返回给你。这个功能让你能够方便地测试代码并检查它们的输出,因为你不需要明确地指定任何返回值。
    所以并不是代码多执行了一次,只是因为这个机制造成的假象而已。
    如果你把第二个for循环写在一个js文件里,再通过node 文件名.js的方式执行,还是只会执行两次输出语句的。
image.png
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题