Javascript JS:为什么代码在控制台上的运行方式与在';是在.js文件上吗?

Javascript JS:为什么代码在控制台上的运行方式与在';是在.js文件上吗?,javascript,console,google-chrome-devtools,Javascript,Console,Google Chrome Devtools,我正在学习JavaScript,我下面的书建议测试代码(用于练习和探索概念)最简单的地方是在浏览器控制台本身,所以这就是我一直在做的 然而,我的一位专业朋友告诉我,应该制作一个html页面,将其链接到一个js文件,并将我要测试的代码放在一个立即调用的函数中。通过这种方式,我可以在浏览器上加载和重新加载页面,以查看控制台上的输出 我很困惑,为什么同一段简单代码如果直接在控制台上键入,与从文件加载相比,会以不同的方式运行或输出 然后我在我的资料中发现了这段代码(用于说明循环的闭包): for (va

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

然而,我的一位专业朋友告诉我,应该制作一个html页面,将其链接到一个js文件,并将我要测试的代码放在一个立即调用的函数中。通过这种方式,我可以在浏览器上加载和重新加载页面,以查看控制台上的输出

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

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

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

for(var i=1;i您看到的第一个
5
不是任何
console.log()
调用的结果

在控制台中键入语句时,它会自动打印语句中最后一个表达式的值。在这种情况下,它会打印上次调用
setTimeout()
返回的值,该值是计时器ID


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

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

在控制台中键入语句时,它会自动打印语句中最后一个表达式的值。在这种情况下,它会打印上次调用
setTimeout()
返回的值,该值是计时器ID


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

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

在控制台中键入语句时,它会自动打印语句中最后一个表达式的值。在这种情况下,它会打印上次调用
setTimeout()
返回的值,该值是计时器ID


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

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

在控制台中键入语句时,它会自动打印语句中最后一个表达式的值。在这种情况下,它会打印上次调用
setTimeout()
返回的值,该值是计时器ID


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

该代码不应生成该输出。我希望它打印出6到5次,而不是5次;如果有5次,它可能来自其他地方。提升与“提升”局部变量(陷入闭包)无关在这个演示中,全局变量也会起同样的作用。我刚刚在Chrome控制台中尝试过,它打印了5次6。该代码永远不会生成该输出。我希望它打印6次5次,而不是5;如果有5,它可能来自其他地方。提升与“提升”局部变量无关(陷入困境)在这个演示中,全局变量也会起同样的作用。我刚刚在Chrome控制台中尝试过,它打印了5次6。该代码永远不会生成该输出。我希望它打印6次5次,而不是5;如果有5,它可能来自其他地方。提升与“提升”局部变量无关(陷入困境)在这个演示中,全局变量也会起同样的作用。我刚刚在Chrome控制台中尝试过,它打印了5次6。该代码永远不会生成该输出。我希望它打印6次5次,而不是5;如果有5,它可能来自其他地方。提升与“提升”局部变量无关(陷入闭包)和全局变量在本演示中也会起同样的作用。我刚刚在Chrome控制台中试用过,它打印了6次。谢谢!回想起来很明显。:)你认为这就是为什么我的朋友告诉我永远不要相信在控制台上测试虚拟代码的原因吗?你同意他的观点吗?现在我对此很好奇。我一直使用控制台进行测试。谢谢!回想起来很明显。:)你认为这就是为什么我的朋友告诉我永远不要相信在控制台上测试虚拟代码的原因吗?你同意他的观点吗?现在我对此很好奇。我一直使用控制台进行测试。谢谢!回想起来很明显。:)你认为这就是为什么我的朋友告诉我永远不要相信在控制台上测试虚拟代码的原因吗?你同意他的观点吗?现在我对此很好奇。我一直使用控制台进行测试。谢谢!回想起来很明显。:)你认为这就是为什么我的朋友告诉我永远不要相信在控制台上测试虚拟代码的原因吗?你同意他的观点吗?现在我对此很好奇。我一直在使用控制台进行测试。