JavaScript 函数执行时机
前言: 涉及内容
- js 代码的疑惑之为什么会打印 6 个 6
- 其他方法
js 代码的疑惑之为什么会打印 6 个 6
- setTimeout 是延迟执行的,for 循环是立即实行的,并且 for 循环中的 i 是全局变量,前面没有声明任何 var 或者 let。当 for 循环完成后,才会执行 setTimeout,所以是 6, 当 i=5 的时候,执行循环体,然后进行 i++操作,此时是 6。
<!-- 请看如下代码 -->
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 让上述代码打印出 0,1,2,3,4,5。 只需让 for 循环与 let 配合使用即可,let的作用域是{},每次循环就开启一个新的作用域(总共开启了6次)
for (let i = 0; i < 6; i++) {
setTimeout(() => {
console.log(i);
}, 0);
}
- 除了可以使用 for let 配合,还有什么方法可以打印出 0,1,2,3,4,5,使用闭包,除了用()括起来,还可以使用+ -,~,推荐使用! 使用() 如果上面有 console.log 请注意结尾要有';' 进行隔断,推荐使用!
for (var i = 0; i < 6; i++) {
!(function (j) {
//闭包
setTimeout(function () {
console.log(j); //分别输出i的值
}, 0);
})(i); //闭包
}