一、let和const
let和var的区别:
1.let所声明的变量,只在let命令所在的代码块内生效。
示例:
if(true){
let num=10;//此变量只在该代码块内有效
else{
let a=20
}
}
2.没有变量提升(先定义,再使用)。
示例:
使用var定义:
console.log(a);//undefined
var a=10;
使用let定义:
console.log(b);//报错
let a=10;
3.不能重复定义(同一作用域)
示例:
使用var定义:
var num=5;
var num=10;
console.log(num);//10
使用let定义:
let num=20;
let num=50;
console.log(num);//报错
4.let定义的变量不会作为window对象的属性。
示例:
使用var定义:
var num=10;
consloe.log(num);//10
console.log(window.num);//10
使用let定义:
let num=20;
console.log(num);//20
console.log(window.num);//undefined
暂时性死区
定义:在ES6中明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭的作用域。凡是在声明之前使用这些变量就会报错。
示例:
if(condition){
console.log(typeof value);//报错 暂时性死区
let value="blue"
}
const:
const定义的变量称为常量,一旦声明不能改变。
示例:
1.
const a=10;
a=20;
console.log(a);//报错
const arr=[100,200];
arr[1]="hello";//数据可以改变
console.log(arr);//[100,"hello"]
注意:
- 上面所讲的let所具有的特性const都有。
- const限制的是变量指向内存地址所保存的数据不得改动,并不是变量的值。
Object.freeze(冻结)
注:冻结的数据不能改变
示例:
const arr=Object.freeze([100,200]);
arr[0]="hello";//数据不能改变
console.log(arr);//[100,200]