读书笔记(二十四):块级作用域

1.变量提升
在函数作用域或全局作用域中通过关键字var声明的变量,无论实际上是在哪声明的,都会被当成在当前作用域顶部声明的变量。如:

function getValue(condition) {
	if (confition) {
		var value = 'blue';
	}
	// 此处可访问value,为undefined
}

js预编译时会改成:

function getValue(condition) {
	var value;
	if (confition) {
		value = 'blue';
	}
	// 此处可访问value,为undefined
}

2.块级声明
声明在指定块的作用域之外无法访问的变量。

不同层级声明会被遮蔽,相同层级声明则会抛出错误,如:

var count = 30;
let count = 40; // 抛出语法错误
var count  = 30;
if (condition) {
	let count = 40; // 遮蔽全局的count
}

const声明并初始化常量,不能再被赋值;但如果常量是对象,允许修改值,不允许修改绑定;如:

const person = {
	name: 'nicholas'
};

person.name = 'Greg'; // 可以修改对象属性

// 抛出语法错误
person = {
	name: 'Greg'
};

3.临时死区
js引擎在扫描代码发现变量声明时,要么将它们提升至作用域顶部(var声明),要么将声明放到临时死区(TDZ)中。访问TDZ中的变量会触发运行时错误,只有执行过变量声明语句后,变量才会从TDZ中移除,然后方可正常访问。

if (condition) {
	console.log(typeof value); // 引用错误
	let value = 'blue';
}

console.log(typeof value); // undefined,此时value并不在TDZ中
if (condition) {
	let value = 'blue';
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值