ES6 var、let、const的区别

在函数作用域或全局作用域中,通过 var 关键字声明的变量,无论在哪里声明,都会被提升为当前作用域顶部声明的变量(即变量提升机制),但初始化操作会留在原处执行,如:

  经过变量提升之后相当于  

 

块级声明:  用于在指定块的作用域之外无法访问的变量。块级作用域(词法作用域)存在于:函数内部、块中(花括号{}包裹的区域)

ES6中新增的两个块级声明关键字 let 、const

let、const的相同点:声明的都是块级标识符,不存在声明提前

      因此假如使用let、const声明的变量或常量没有立即赋值,从块作用域开始到该变量被初始化处理的阶段就称之为暂存死区(TDZ)

 

let:  let的声明的用法与var相同。只不过let声明不会被提升(let声明的变量不存在变量提升机制)

         若 let 声明的变量需要在当前封闭代码块的作用域全局使用,则可以将该变量放在当前代码块顶部声明

     

 

const :作用域和 let 关键字相同,只在声明所在的块级作用域内有效

             定义(声明)常量(不能被修改的),声明的同时必须赋值,先声明后赋值会报错

             且const声明的常量不能被重新声明或赋值

             在同一作用域中,const声明的标识符必须是唯一的,存在同名标识符就会报错,无论其同名标识符是用什么关键字声明的

当前作用域下 temp 不能存在同名标识符,不能被重新声明或赋值
const temp = 233;   

用const声明对象是一个比较特殊的存在,

const声明的对象不允许重新声明、修改绑定,但允许修改对象属性值

数组,不允许修改绑定,但允许修改值
const arr = ['chen','shi','jia','zu'];
arr[0] = 'huang';
console.log(arr);  不会报错
const arr = [1,3,4];   报错

遍历数组arr,只执行i=0的一次循环,后续i=1,是为 i 重新赋值,报错
for (const i = 0; i < arr.length; i++) {
    console.log(i);  
}
数组可以被扩展,也可以被禁止
    const arr = ['chen','shi','jia','zu'];
    arr.push('qiye');   不会报错

使用Object.freeze()函数可以禁止数组被扩展
    const array = Object.freeze(arr);
    array.push('qiye');   报错
对象, 不允许修改绑定,但允许修改属性值
const obj = {
    user:'chen',
	hostname:'ID',
	password:'123'
};
obj.user = 'huang';
console.log(obj);  不会报错
const obj = {name: 'huahua'};   报错

遍历对象,不会报错
for (var key in obj) {
    console.log(key);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值