123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- </head>
- <body>
- <!--
- 1、如何证明js执行是单线程的?
- *setTimeout()的回调函数是在主线程执行的
- *定时器回调函数只有在运行栈中的代码全部执行完后才有可能执行
- 2、为什么js要用单线程模式,而不用多线程模式?
- *JavaScript的单线程,与它的用途有关
- *作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM
- *这决定了它只能是单线程,否则会带来很复杂的同步问题(即使H5里面有了多线程,也只能有一个线程去更新操作界面)
- 3、代码的分类
- 初始化代码:
- 回调代码:回调函数里面的代码(比如alert('2222') 等)
- 4、js引擎执行代码的基本流程
- *先执行初始化代码:包含一些特别的代码 回调函数(异步执行)
- (必须在所有的初始化代码执行以后,才有可能被执行,这样的代码被称为异步的代码)
- 设置定时器
- 绑定事件监听
- 发送ajax请求
- *后面在某个时刻才会执行回调代码
- -->
- <script>
- setTimeout(function(){
- console.log('timeout 2000')
- alert('2222')
- },2000)
- setTimeout(function(){
- console.log('timeout 1000')
- alert('1111')
- },1000)
- setTimeout(function(){
- console.log('timeout 0')
- },0)
- function fn(){
- console.log('fn()')
- }
- fn()
- console.log('alert之前')
- alert('---------')
- /*
- alert的作用:暂停当前主线程的执行,同时暂停计时,
- 点击确定后,恢复程序执行和计时
- */
- console.log('alert之后')
- </script>
- </body>
- </html>
|