let命令:
1.块级作用域(区分全局变量和局部变量:在function中是否使用var声明),只有在{}内有效,与function无关
2. 不存在变量作用域提升:使用let必须先声明在使用
3.不允许重复声明
4.暂时性死区
5.全局变量与window没有关系,严格区分window对象和全局对象
6.块级声明
<script>
//举例1
if(true){
var a=1;
let b=2;
console.log(b);//2
}
console.log(a);//1
console.log(b);//b is not defined
//举例2
console.log(a);//undefined
var a=1;
console.log(b);//b is not defined
var b=2;
//举例3
var a=1;
var a=2;
console.log(a)//2
let b=3;
let b=4;
console.log(b)//'b' has already been declared
//举例4
var name="Tim";
if(true){
console.log(name);//name is not defined
let name="Kitty";
}
//举例5
var a=1;//全局变量
console.log(window.a);//1
function fn(){//全局方法
console.log('hello');
}
window.fn();//hello
let b=2;//全局变量
console.log(window.b);//undefined
//举例6
"use strict";//严格模式
{
function test(){
console.log('test');
}
}
test();//test is not undefined
</script>
const命令:
1.常量值一旦声明不可改变,一般定义常量使用全部大写(开发规范)
2.不可重复声明
3.声明必须赋值,防止意外修改
4.先声明在使用,作用域和let一样
5.对象常量,内容可变,引用地址不可变
<script>
//举例1
const A=12;//定义常量A
console.log(A);//12
//举例2
const B=12;
console.log(B);
const B=13;//Identifier 'B' has already been declared
//举例3
const C;//Missing initializer in const declaration
//举例4
if(true){
const D=20;
console.log(D);//20
}
console.log(D);//访问不到
//举例5
const E={name:'Tim',age:1}
console.log(E.name);//Tim
E={name:'Kitty'};//Assignment to constant variable
E.name='Kitty';
console.log(E.name);//Kitty
</script>
了解冻结常量对象
<script>
const E1=Object.freeze({name:'Tim',age:1});
console.log(E1.name);//Tim
E1.name='Kitty';
console.log(E1.name);//Tim
</script>