【发布时间】:2015-12-31 06:08:22
【问题描述】:
我正在学习 JavaScript,我正在关注的书建议测试代码(用于练习和探索概念)最简单的地方是浏览器控制台本身,所以这就是我一直在做的事情。
但是,我的一位专业朋友告诉我改为制作一个 html 页面,将其链接到一个 js 文件,然后将我想要测试的代码放在一个立即调用的函数中。这样我就可以在浏览器上加载和重新加载页面以查看控制台上的输出。
我很困惑为什么相同的简单代码在控制台上直接输入和从文件中加载时会以不同的方式运行或输出。
然后我在我的材料中遇到了这段代码(用于说明循环的闭包):
for (var i=1; i<=5; i++) {
setTimeout(function timer(){
console.log(i);
}, i*1000 );
}
书上说这段代码应该输出数字 6 五次,但是当我在控制台(谷歌浏览器)上输入它时,输出是一个 5,然后是五个 6s(每秒一个)。
记住我朋友说的话,我听从了他的建议,确实,同样的代码,当从链接到 html 的 js 文件执行时,输出不同,导致数字 6 五个次。
究竟为什么会发生这种情况?发动机有区别吗?编译是否因某种原因而不同?
我不知道这里发生了什么。我的朋友没有时间或知识来解释,而且这本书也从未涉及过这个主题。
【问题讨论】:
-
该代码应该从不生成该输出。我希望它打印出 6 5 次,而不是 5;如果有 5,它可能来自其他地方。提升是无关紧要的,因为“提升”局部变量(捕获在闭包中)和全局变量在此演示中的工作方式相同。
-
我刚刚在Chrome控制台试了一下,打印了5次。
标签: javascript console google-chrome-devtools