我的问题是:为什么功能结果出现在浏览器控制台中的for循环之前?它应该运行循环(1,2,3,4,5),但它首先运行('酷'和1!2!3),所以下面我添加我的代码和控制台结果。如果有人能解释我这种行为,我将非常感激。它不是重复的,因为,我想了解它是如何工作的,而不是让它工作。在建议的问题中,有一个解决方案首先使用setTimeout运行循环,但不能完全解释行为。
// Loops + Closure
for (let i = 1; i <= 5; i++) {
setTimeout(function timer() {
console.log(i)
}, i * 1000)
}
//Modules
function CoolModule() {
let something = 'cool'
let another = [1, 2, 3]
function doSomething() {
console.log(something)
}
function doAnother() {
console.log(another.join('!'))
}
return {
doSomething: doSomething,
doAnother: doAnother
}
}
let foo2 = CoolModule()
foo2.doSomething() // 'cool'
foo2.doAnother() // 1 ! 2 ! 3
答案 0 :(得分:0)
JavaScript通过一个接一个地运行代码块来工作。因此,您有一个以for
循环开头并以foo2.doAnother()
结尾的代码块。但是对setTimeout
的调用不会立即运行代码 - 它们会在队列中放置新的代码块 - console.log(i)
块。所以你的代码更像是;
timer()
timer()