JS 函数的执行时机
下面将有这段JS 代码,来理解JS 函数的执行时机
let
目录
- 解释为什么上面代码会打印 6 个 6
- 写出让上面代码打印 0、1、2、3、4、5 的方法
- 除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5
为什么这段代码会打印 6 个 6
let
运行结果:
![f808b192d4d42638287e7bb6afb377af.png](https://i-blog.csdnimg.cn/blog_migrate/daa73b80112521cc176a3b9cf91e2824.png)
首先,代码第一行,在外面声明了一个i变量,使得目前全局只有一个变量i
第二行,进入循环体中,循环体第一条语句就是设定一个“延时闹钟”,延后执行
至于要延后多久呢?答案是马上! 但是,由于JS 是单线程的,不存在同时执行两条语句,所以这个马上
为执行其它语句后, 马上再执行
所以,为什么会打印 6 个 6 的原因
我们把源代码拉拉长就可以知道,这个马上,是有多马上
let
运行结果:
![53882f5476f373ecb315df55ef3d0a18.png](https://i-blog.csdnimg.cn/blog_migrate/e8746fca99eb94cb323d809f15a2ef94.png)
让上面代码打印 0、1、2、3、4、5 的方法
其实ES6 之后,JS 引擎就对这种写法,专门“优化”了
使其符合“正常”的思维结果
for
运行结果:
![4a79506d312162418cb1a5f237c762eb.png](https://i-blog.csdnimg.cn/blog_migrate/60df677cb28e4cf46451f2ee4802b2b8.png)
除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5
- 采用闭包,并立即执行内部函数
let
- 利用 setTimeout 的第三个参数,将 i 传进去
let
- 利用 const 关键字
let