javascript - JS : Why does code run differently on the console than when it's on a . js 文件?

标签 javascript console google-chrome-devtools

我正在学习 JavaScript,我正在关注的书建议测试代码(用于练习和探索概念)的最简单的地方是浏览器控制台本身,所以这就是我一直在做的事情。

但是,我的一位专业 friend 告诉我改为制作一个 html 页面,将其链接到一个 js 文件,并将我想要测试的代码放在立即调用的函数内。这样我就可以在浏览器上加载和重新加载页面以查看控制台上的输出。

我很困惑为什么同一段简单的代码如果直接在控制台上输入与从文件加载相比会以不同的方式运行或输出。

然后我在我的 Material 上发现了这段代码(用于说明循环闭包):

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

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

记住我 friend 所说的,我遵循了他的建议,事实上,相同的代码,当从链接到 html 的 js 文件执行时,输出不同,结果是数字 6 五次。

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

我不知道这里发生了什么。我的 friend 没有时间或知识来解释,而且这本书从未涉及这个主题。

最佳答案

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

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

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

关于javascript - JS : Why does code run differently on the console than when it's on a . js 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32917195/

相关文章:

javascript - 如果对象的类型只是 "Object",如何在 DevTools 内存快照中找到特定对象?

graphql - 当所有请求都具有相同的 URL 时,如何在开发工具网络选项卡中区分 GraphQL 请求?

javascript - 切换选项卡时 jQuery 动画功能中断

javascript - 使用 Jest 进行测试 - 重置/清除由测试函数设置的变量并捕获控制台日志

javascript - 使用VBA执行javascript函数

javascript控制台对象出现字母A和j,它们是什么意思

c - 从 C 代码打开 Linux 控制台

html - 在 Firefox 或 Chrome Inspector 中复制显示的 HTML(保持缩进和格式)

Javascript隐藏div并显示

ruby-on-rails - 通过 Rails 控制台编辑数据库记录