函数执行时机不同,运行结果也不同
同步任务:
上一件事情没有完成,继续处理上一件事情,只有上一件事情完成了,才会做下一件事情 –> JS中大部分都是同步编程。
同步
let a =1
function fn(){console.log(a)}
a=2
fn()
按步骤执行
1 将声明变量a并赋值为1
2 声明函数fn
3 将2赋值给a
4 执行fn() 打印出a并结束
异步任务:
规划要做一件事情,但是不是当前立马去执行这件事情,需要等一定的时间,这样的话,我们不会等着他执行,而是继续执行下面的操作。
异步
let a=1
function fn(){ setTimeout(()=>{ console.log(a) },0) }
fn()
a=2
执行步骤
1 声明变量a并赋值
2 声明函数fn (不看略过看下一步)
3 并执行fn() setTimeout为异步等待(跳到下一步)
4 将a重新赋值=2
5 所以步骤操作完了 然后来执行setTimeout() 打印出a //2 结束
1 解释为什么如下代码会打印6个6
let i=0
for(i=0;i<6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
答:个人理解=> 在for循环中 先执行for循环第一行i=0 满足条件 执行i<6 满足条件执行里面内容( 里面内容遇到setTimeout() 由于它是定时器 需要等待执行" 即使设置它的值为0s,也是在for循环结束之后再执行的" )跳过serTimeout内容继续执行i++ 满足条件下一轮循环(后面循环遇到setTimeout同第一次一样跳过先不执行)直到i为6时 它不满足i<6的条件 退出for循环 再来执行setTimeout 执行时它的值为6 所以它得到的结果为6个6。
2 写出让上面代码打印0 、1、2、3、4、5的方法
用let语法 (let为了满足新人的幻想出的奇葩的复制语法)
for(let i=0;i<6;i++){
setTimeout(()=>{console.log(i) // 1,2,3,4,5,6
})
}
3 除了使用 for let配合,还有什么方法可以打印出0、1、2、3、4、5
for(var i=0;i<6;i++){
console.log(i) 用var 不配合setTimeout使用也可以
}
网友评论