let:
1.Let定义对象不属于顶层对象window
let在全局作用域中声明的对象不会成为window对象的属性,为了避免SyntaxError,
也要确保页面不会重复声明同一个对象。
2.不允许重复声明
let age;
let age;//此处会报错SyntaxError,age已经声明过了
3.不存在变量提升
console.log(age);
let age=18; //此处报错ReferenceError: age没被定义
4.暂时性死区(声明之前的无法使用)
在let声明之前的执行瞬间被称为"暂时性死区",都不会被执行。
在此之前的所有声明都会抛出ReferenceError
5.块级作用域
let的存在范围是块级作用域,块级作用域是函数作用域的子集。
let name='lihua';
if(true){
let name='zhangli';
}
console.log(name);//name=lihua
Const:
1.Const定义对象不属于顶层window对象
Const定义的对象也不会成为顶层window的对象
2.不允许重复声明
Const age=18;
Const age=34;//此处会报错SyntaxError,age已经声明过了
3.不存在变量提升
console.log(age);
Const age=18//此处报错ReferenceError: age没被定义
4.暂时性死区(声明之前的无法使用)
在Const声明之前的执行瞬间被称为"暂时性死区",都不会被执行。
在此之前的所有声明都会抛出ReferenceError
5.块级作用域
Const的存在范围是块级作用域,块级作用域是函数作用域的子集。
const name='lihua';
if(true){
const name='zhangli';
}
console.log(name);//name=lihua
总结:
1.const基本与let都是相似的,但要注意的一点是,在定义const变量的时候就要赋初值, 否则会报TypeError的错误。
2.在使用for循环遍历的时候要选择let来定义变量,而不能使用const定义变量,因为这 会导致迭代变量自增。
3.优先选择const来定义变量,let次之。const可以强制变量保持不变,在一般的代码中 基本定义了变量就不会改变,所以选择const会更好一点。