let 和const

浅浅的花香味﹌ 2022-01-21 09:53 298阅读 0赞
  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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <script>
  11. var price = 100;
  12. var price = 200;
  13. let count = 10;
  14. //let count = 10;
  15. /*
  16. let不允许在相同作用域内,重复声明同一个变量。
  17. 这样写的好处是:当你和同事同时声明相同的变量名的时候,用es5提供的var,后面的变量会覆盖前面相同名字的变量
  18. 例如上面的price;所以用let
  19. */
  20. let discount = 20;
  21. const key = 'abc123';
  22. console.log('price=' + price)//200;
  23. /*
  24. let声明的变量是可以直接重新赋值的;
  25. */
  26. let count1 = 10;
  27. count1 = 11;
  28. console.log('count1=' + count1);//11
  29. /*
  30. const声明的变量是不能直接重新赋值的,只能通过间接的方式是给const去赋值;
  31. */
  32. const key1 = {
  33. name: 'xyz',
  34. age: 21
  35. }
  36. // console.log('key1=' + key1)//疑问为什么这种形式打印key1返回的是key1=[object Object]
  37. console.log(key1)//这才是想要的:{name: "xyz", age: 21}
  38. //间接改变const声明的变量值(改变里面的属性值)
  39. key1.age = 22;
  40. console.log(key1)//{name: "xyz", age: 22}
  41. //注意你如果连属性值都不想被改变,就用js的Object.freeze()方法
  42. const key2 = Object.freeze(key1);
  43. key2.age = 23;
  44. console.log(key2);//{name: "xyz", age: 22}
  45. /*
  46. window里面有个name属性是空字符串;
  47. 不改变 window里面的name属性
  48. */
  49. // ES5的做法
  50. (
  51. function () {
  52. var name = 'xyz';
  53. console.log(name);//xyz
  54. }
  55. )();
  56. // ES6的做法
  57. {
  58. let name = 'xyz';
  59. // const name='xyz';
  60. console.log(name) //xyz
  61. }
  62. /*
  63. 举个例子来证明var 和let 的具体区别:
  64. 如果你想进行ajax请求数组里面一一对应的数据用var肯定是不行的,
  65. 需要用let
  66. */
  67. for (var i = 0; i < 10; i++) {//此时的i是全局变量
  68. console.log(i);
  69. setTimeout(function(){//模拟ajax请求过来的数据
  70. console.log(`i:${i}`)//10个i:10
  71. },1000)
  72. }
  73. console.log(`${i}我是全局变量`);
  74. for (let j = 0; j < 10; j++) {
  75. console.log(j);
  76. setTimeout(function(){//模拟ajax请求过来的数据
  77. console.log(`j:${j}`)//j:0 j:1 j:2 ... j:9
  78. },1000)
  79. }
  80. /*
  81. var变量提升;
  82. let 和const 临时性死区
  83. */
  84. console.log(color);//undefined
  85. var color='yellow';
  86. console.log(color1);
  87. /*
  88. let也是存在变量提升的,但是在这个变量(color1)声明之前,
  89. 是存在着临时性死区的,所以下面不管是let还是const都会报错。
  90. */
  91. let color1='yellow';//Uncaught ReferenceError: color1 is not defined
  92. // const color1='yellow';//Uncaught ReferenceError: color1 is not defined
  93. /*
  94. 什么时候使用: let const var?
  95. 如果你的值会被重新更新,定义,请使用:let;
  96. 一个变量不想再被重新定义,请使用:const
  97. ES6中最好别在用var(以前的技术了,要跟上时代呀!)
  98. */
  99. </script>
  100. </body>
  101. </html>

发表评论

表情:
评论列表 (有 0 条评论,298人围观)

还没有评论,来说两句吧...

相关阅读

    相关 var、letconst区别

    const定义的变量不可以修改,而且必须初始化。 var定义的变量可以修改,如果不初始化会输出undefined,不会报错。 let是块级作用域,函数内部使用