ES6 变量声明const和let

变量声明const和let

在ES6之前,我们都是用var关键字声明变量。无论声明在何处,都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部)。这就是函数变量提升例如:

function fun() {
    	if(flag) {
        	var test = 'hello man'
    	} else {
        	console.log(test)
    	}
}
//以上的代码实际上是:
function fun() {
	var test // 变量提升,函数最顶部
    	if(flag) {
        	test = 'hello man'
    	} else {
        	//此处访问 test 值为 undefined
        	console.log(test)
    	}
    	//此处访问 test 值为 undefined
 }

所以不用关心flag是否为 true or false。实际上,无论如何 test 都会被提前创建声明。
在ES6中
我们通常用 let 和 const 来声明,let 表示变量、const 表示常量。let 和 const 都是块级作用域。怎么理解这个块级作用域?

-在一个函数内部
-在一个代码块内部

说白了只要在{}花括号内的代码块即可以认为 let 和 const 的作用域

function aa() {
    	if(flag) {
       		let test = 'hello man'
    	} else {
        	//test 在此处访问不到
        	console.log(test)
    	}
}

let的作用域是在它所在当前代码块,但不会被提升到当前函数的最顶部。

const声明的变量必须提供一个值,而且会被认为是常量,意思就是它的值被设置完成后就不能再修改了。

const name = 'lux'
    name = 'joe' // 再次赋值此时会报错

我们都知道,JS引擎扫描代码时,如果发现变量声明,用 var 声明变量时会将声明提升到函数或全局作用域的顶部。但是 let 或者 const,会将声明关进一个小黑屋也是TDZ(暂时性死区),只有执行到变量声明这句语句时,变量才会从小黑屋被放出来,才能安全使用这个变量。

{
        console.log(value) // 报错
        let value = 'lala'
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值