暂时性死区: 作用域开始 到用let定义变量这段区间内为暂时性死区。let 不会变量提升

    let

    1. 不会变量提升。

    image.png
    image.png

    1. 在同一个作用域下不可以重复声明 会出现引用错误

      image.png
      image.png

    2. 只能在当前作用域下生效 出现ReferrenceError

    image.png
    image.png
    let 和 const 的区别
    总结

    1. // let 在同一个作用域下不可重复声明
    2. // let 不会提升
    3. // let 只能在当前作用域下生效
    4. // demo1
    5. {
    6. let a = 1;
    7. }
    8. console.log(a) // 报错 a.is not defined
    9. // demo2
    10. if(1){
    11. let a = 1;
    12. }
    13. console.log(a) // 报错 a.is not defined
    14. // demo3
    15. for(;1;){
    16. let a = 1;
    17. }
    18. console.log(a)// 不报错 但是死循环了、
    19. // demo4
    20. for(let i = 0; i < 10; i++){
    21. }
    22. console.log(i)// 报错 i.is not defined
    23. // demo5
    24. var arr = [];
    25. for(var i = 0;i< 10; i++){
    26. arr[i] = function(){
    27. console.log(i);
    28. }
    29. }
    30. for(var i=0;i<arr.length;i++){
    31. arr[i]();//0-9
    32. }
    33. // demo6
    34. for (var i = 0; i < 5; i++) {
    35. i = 'a';
    36. console.log(i);
    37. }
    38. // demo7
    39. // 好像可以拿到i的值
    40. for (let i = 0; i < 5; i++) {
    41. i = 'a';
    42. console.log(i);
    43. }
    44. // demo8
    45. for (let i = 0; i < 5; i++) {
    46. var i = 'a';// i has already been declared
    47. console.log(i);
    48. }
    49. // demo9
    50. for(let i = 0;i< 10; i++){
    51. let i = 0;// i has already been declared
    52. console.log(i);
    53. }
    54. if(1){
    55. let a = 1;
    56. {
    57. let a = 2;
    58. }
    59. }
    60. // let 本质就是为了js添加一个块级作用域
    61. //
    62. //
    63. //
    64. //
    65. // 结构结构赋值
    66. //
    67. let = [ a ]= [1];
    68. let {(a: b)} = {}; // 报错 Uncaught SyntaxError: Unexpected token '('
    69. let {(a):b} = {}; // 报错 Uncaught SyntaxError: Unexpected token '('
    70. let (a:(b))= {}; // 报错 Uncaught SyntaxError: Unexpected token '('
    71. // 用 let/var 声明加括号就报错。
    72. function foo([z]){
    73. return z;
    74. }
    75. console.log(foo([1]))
    76. let arr = [1,2,3];
    77. let {0:first,[arr.length-1]:last} = arr;
    78. // 数组也是特殊的对象 也能进行解构赋值
    79. // [(b)] = [3] // 3
    80. // ([b]) = [3] // 报错
    81. ({a:(b) = {}}); // b = {} 本身并未匹配 {a:b={}};默认值
    82. // var a= {};
    83. // [(a.b)] = [3]; // a.b = 3;
    84. // console.log(b) // b is not defined
    85. //
    86. //
    87. // let a = 'x',b = 'y',obj = {};
    88. // ({a: obj[a + b]} = {a: 2});
    89. // console.log(obj) //{xy:2};
    90. //
    91. //
    92. //
    93. // let obj={a: 1,b: 2,c: 3},obj2={} ;
    94. // ({a: obj2.x,b:obj2.y,c:obj2.z})
    95. //
    96. //
    97. // 值交换
    98. // let a =10,b=20;
    99. // [b,a] = [a,b];
    100. //
    101. //
    102. // 变量的解构 就是变量的赋值,变量通过模式匹配来解构赋值。
    103. //
    104. //
    105. // let {a:x,a:y} = {a:1};
    106. // console.log(x,y);//1 1
    107. //
    108. //
    109. var x = 200,y = 300, z = 100;
    110. var obj1 = {x: {y: 42},z: {y: z}};
    111. ({y:x = {y:y}}={obj1})
    112. ({z:y = {y:z}}={obj1})
    113. ({x:z = {y:x}}={obj1})
    114. 解构中使用对象或者数组的时候慎用 代码可读性很差
    115. function test([x,y]){
    116. console.log(x,y);
    117. }
    118. // test(1,2) //1,2
    119. // test([1]) //1
    120. // test() //报错
    121. function foo({x,y}){
    122. console.log(x,y);
    123. }
    124. foo({x:1,y:1});
    125. function foo({x = 10} = {},{y} = {y:10}){
    126. console.log(x,y);
    127. }
    128. // foo() 10,10
    129. // foo({},{}) 10 undefined
    130. // foo({x:2},{y:3}) 2,3
    131. // {X:X=3}==>{X=3};
    132. // 解构的隐式类型转换
    133. // 字符串->数组
    134. const [a,b,c,d,e] = "hello";
    135. // 'hello' => 数组
    136. // 字符串->类数组
    137. let {length:len} = "hello";
    138. // number->包装类
    139. let {toString:s} = 123;
    140. // console.log(s === Number.prototype.toString) true
    141. // 布尔值,number,string 都能进行隐式类型转换。转换成相对应的包装类
    142. //
    143. //
    144. // undefined ,null 不能进行隐式类型转换
    145. let {prop} = undefined;
    146. /***************************************************/
    147. // 形参有默认值的时候 形参和实参的映射关系就不存在了。
    148. function foo ({x,y=5} = {}) {
    149. }
    150. // foo({}) undefined 5
    151. // foo({x:1}) 1,5
    152. // foo() undefined 5
    153. // fetch(url, options)
    154. // body:body= "";
    155. function fetch(url,{body = "",methods="get",header={}}={}){
    156. console.log(method)
    157. }