JS:为什么代码 运行 在控制台上与在 .js 文件上不同?

JS: Why does code run differently on the console than when it's on a .js file?

我正在学习 JavaScript,我正在阅读的书建议测试代码(用于练习和探索概念)的最简单位置是在浏览器控制台本身上,所以这就是我所拥有的在做。

然而,我的一位专业朋友告诉我改为制作一个 html 页面,link 将其放入 js 文件并将我要测试的代码放在立即调用的函数中.这样我就可以在浏览器上加载和重新加载页面以查看控制台上的输出。

我很困惑为什么直接在控制台上输入和从文件加载相同的简单代码 运行 或输出不同。

然后我在 material 上看到了这段代码(用于说明循环的闭包):

for (var i=1; i<=5; i++) {
    setTimeout(function timer(){ 
        console.log(i); 
    }, i*1000 );
}

书上说这段代码应该输出数字 6 五次,但是当我在控制台上输入它时 (Google Chrome) 输出是 5,然后是五次6s(每秒一个)。

记住我朋友说的话,我听从了他的建议,确实,相同的代码,当从 js 文件 linked 执行到 html 时,输出不同,导致数字 6 五次。

究竟为什么会这样?是发动机上的区别吗?编译是否由于某种原因而发生不同?

我不知道这里发生了什么。我的朋友没有时间和知识来解释,这本书也没有涉及这个主题。

您看到的第一个 5 不是任何 console.log() 调用的结果。

当您在控制台中键入语句时,它会自动打印语句中最后一个表达式的值。在本例中,它打印了上次调用 setTimeout() 返回的值,即计时器 ID。

如果多次执行,您会看到第一个数字每次都增加。