ES6之let,const

var的声明提升

var声明及其变量提升:变量的声明提升到函数顶部,但是初始化依旧停留在原地执行。(详情参考js预编译文章)

function A(){
	if(true){
		var a = 10;	
	}
}
//预编译阶段变量提升:
function A(){
	var a;
	if(true){
		a = 10;	
	}
}

块级声明

块级声明用于声明指定块的作用域之外无法访问的变量:

  • 函数内部
  • 块中({}之间的区域)

let

  • let声明不被提升,可以把变量的作用域限制在当前代码块中。
  • 作用域已存在某个标识符,再使用let声明它就会抛出错误
function A(){
	if(true){
		let a = 10;	
		//其他代码
	}else {
		//a在此处访问不到
		var b = 1;
		let b = 2;//错误,b已被声明
	}
}

const

  • 声明常量,不可被更改。
  • 声明同时必需初始化,否则抛出错误。
  • 作用域已存在某个标识符,再使用let声明它就会抛出错误。
  • 如果声明的常量是个对象,这个对象内的值可以被更改。(即不能修改对象的绑定,但能修改对象的值)

let,const的临时死区(Temporal Dead Zone,TDZ)

-当js引擎扫描代码预编译时,发现let声明的变量,把他放到TDZ中,只有执行过变量声明后,才会从TDZ中移出,才能正常访问。

typeof b;//undefined,因为不存在b
function A(){
  typeof a;//打印错误,因为在当前作用域中,a在TDZ中,所以会错误
  let a = 1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值