本文主要说一说js函数的执行机制,先来看看下面这一段代码:
let
这段代码的打印结果是6个6而不是0,1,2,3,4,5。
先来解释为什么是6:
原因是setTimeout的调用时机是在for循环结束之后执行的(其实是和js的异步执行有关,setTimeout放在队列里,之后我会详细解释一篇js的单线程和他的异步机制),当for循环执行结束之后,此时的i已经变成了6(为什么不是5?原因是i = 5的时候会再进行一次i++,此时i = 6;但是这个i没有进入循环,而i的值此时确实已经变成了6),在setTimeout执行的时候将i的值打印出来。
为什么是6个?
原因是for循环执行了 0,1,2,3,4,5六次,里面的setTimeout被定义了6个(可以想象成设定了6个闹钟),所以会打印出6个。
那么如何利用上述方法打印出0,1,2,3,4,5
//方法一
文章参考连接:
文章参考连接:
调用栈:为什么JavaScript代码会出现栈溢出 | 浏览器工作原理与实践blog.poetries.top![218e9bda127f18e04bbe7a2b8b9fafa7.png](https://i-blog.csdnimg.cn/blog_migrate/3504e1be36c7a522be37889ebc5b7fba.jpeg)
真正的理解let:
方应杭:我用了两个月的时间才理解 letzhuanlan.zhihu.com![3e6f3d8a7bfda26b626979c8c28a4af8.png](https://i-blog.csdnimg.cn/blog_migrate/67518131cdcf033f70c2269a71754397.jpeg)