一:let用法三个特性
1)声明变量,没有变量提升(没有声明之前不能使用)
2)是一个块作用域
3)不能重复声明
<script> //1. let申明变量,没有变量提升 //Uncaught ReferenceError: a is not defined console.log(a) //let a=10; //2. 是一个块作用域 if (1===1){ let b=10; } //1.html:15 Uncaught ReferenceError: b is not defined //console.log(b) //3.不能重复声明 let a=10; let a=20; //Uncaught SyntaxError: Identifier 'a' has already been declared console.log(a) </script>
二:const用法
1)声明常量,一但被声明,不能修改
2)声明,没有变量提升(没有声明之前不能使用)
3)是一个块作用域
4)不能重复声明
5)onst声明常量是个对象,不能直接修改变量,但是可以修改常量里面属性
<script> //1. const声明常量后,不能被修改,而且声明前完成初始化 const PI =3.14 console.log(PI) //2 const常量使用前必须先声明 //Uncaught ReferenceError: a is not defined //console.log(a) //3. const块作用域 if (1===1){ const P2="1111"; } //Uncaught SyntaxError: Unexpected identifier //console.log(P2) //4. const声明常量,不能重复声明 const P3="1111"; //const P3="1111"; //Uncaught SyntaxError: Identifier 'P3' has already been declared console.log(P3) //5 const声明常量是个对象,不能直接修改变量,但是可以修改常量里面属性 const person ={ name:"1111" } person.name=222 //{name: 222} console.log(person) //Uncaught SyntaxError: Identifier 'person' has already been declared const person ={ age:"3333" } </script>
三:使用场景
//1.使用场景:for 循环例子 var arr = [] for (var i =0;i<10;i++){ arr[i] =function(){ return i; } } console.log(arr[5]()); //结果10 var有提升变量作用,最后i变成10了 var arr = []; var i; for (i =0;i<10;i++){ arr[i] =function(){ return i; } } console.log(arr[5]()); var arr = []; for (let i =0;i<10;i++){ arr[i] =function(){ return i; } } ////结果5 console.log(arr[5]()); //作用2:不全污染全局变量 let RegExp =10; console.log(RegExp); console.log(window.RegExp);