函数什么时候执行
函数是在有括号的情况下才会执行的
// 这个是定义
function fn(){
console.log(a)
}
下面这个才是执行:
function fn(){
console.log(a)
}
fn()
函数执行顺序
按照语句顺序执行
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
执行代码会发现最后打印6个6,仿佛这个是和正常的自觉相悖的。曾经很长一段时间,我也觉得这个结果是错误的。在这里,循环设置了6个setTimeout定时器,等宏任务的语句执行完成后,setTimeout中开始执行新一轮的宏任务,就会按照语句打印6次console.log(i),这个时候因为宏任务执行完成后的i的值是6,所以最后就会打印6次6
如果想输出0到5的话,如下:
// 使用let
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
// 绑定参数, 这里利用的闭包
for(var i = 0; i<6; i++){
(function(i){
setTimeout(()=>{
console.log(i)
},0)
})(i)
}