2_变量提升.html 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 变量提升 使用var 定义变量才会出现变量提升现象
  11. // let、 const 定义的变量不会出现变量提升现象
  12. // 变量提升现象:在变量定义之前,可以使用该变量,但是赋值为undefined,变量提升相当于把变量定义提升到代码的顶部,赋值部分保持原位置
  13. // console.log(a);
  14. // var a = 10;
  15. // 相当于下面的代码 js 在执行之前会处理变量提升,然后在执行代买
  16. // var a;
  17. // console.log(a);
  18. // a = 10;
  19. // 函数提升 函数提升相当于把函数定义提升到代码的顶部,函数调用部分保持原位置
  20. // fn();
  21. // function fn() {
  22. // console.log("hello world");
  23. // }
  24. // console.log(foo);
  25. // var foo = 1;
  26. // function foo(){
  27. // console.log("123");
  28. // }
  29. // foo();
  30. // 函数提升和变量提升同时存在 那么函数提升会优先于变量提升执行(提升的顺序变量会在函数之上)
  31. // 以上代码编译后如下:
  32. // var foo
  33. // function foo(){
  34. // console.log("123");
  35. // }
  36. // console.log(foo);
  37. // foo = 1;
  38. // foo();
  39. // 变量提示其实是提升到当前作用域最顶端
  40. // 变量定义分为全局变量和局部变量 所有作用域也分为全局作用域和局部作用域
  41. // var a = 20;
  42. // function fun(){
  43. // console.log(a);
  44. // var a = 10;
  45. // }
  46. // fun();
  47. // 解析后代码如下
  48. // var a = 20;
  49. // function fun(){
  50. // var a;
  51. // console.log(a);
  52. // a = 10;
  53. // }
  54. // fun();
  55. console.log(a);
  56. let a = 10;
  57. </script>
  58. </body>
  59. </html>