03.验证js是单线程的.html 2.1 KB

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