02.执行上下文栈-练习.html 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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、依次输出什么?
  12. global begin:undefined
  13. foo()begin:1
  14. foo()begin:2
  15. foo()begin:3
  16. foo()end:3
  17. foo()end:2
  18. foo()end:1
  19. global end:1
  20. 2、整个过程中产生了几个执行上下文?
  21. 5个
  22. -->
  23. <script>
  24. console.log('global begin:' + i)
  25. var i = 1
  26. foo(1)
  27. function foo(i) {
  28. if (i == 4) { //递归退出(终止)的条件
  29. return
  30. }
  31. console.log('foo()begin:' + i)
  32. foo(i + 1) //递归调用:在函数内部调用自己
  33. console.log('foo()end:' + i)
  34. }
  35. console.log('global end:' + i)
  36. console.log('测试题1----------------------')
  37. //测试题1
  38. //先执行变量提升,再执行函数提升
  39. function a() { }
  40. var a
  41. console.log(typeof a) //function
  42. console.log('测试题2------------------')
  43. //测试题2
  44. if (!(b in window)) {
  45. var b = 1
  46. }
  47. console.log(b) //undefined
  48. console.log('测试题3------------------')
  49. //测试题3
  50. var c = 1
  51. function c(c) {
  52. console.log(c)
  53. }
  54. c(2) //报错
  55. //测试题3
  56. var c = 1
  57. function c(c) {
  58. console.log(c)
  59. var c = 3
  60. }
  61. c(2) //报错
  62. </script>
  63. </body>
  64. </html>