JS变量提升的原理

什么是变量提升?

console.log(a)
var a = 10

上面这段代码不会报错 反而会输出一个undefined。这就是因为变量声明被提升了
等于

var a;
console.log(a)
a = 10

上面是在全局的作用域中 那在函数作用域也会出现

function fn() {
	console.log(a) // undefined
	var a = 10
}

为什么会有变量提升呢?
变量提升原理
在短暂的编译阶段,JS会搜索出所有的变量声明,并且提前把声明生效,至于剩下的句子就需要等到执行阶段,执行到某一句的时候才会生效 这个就是变提升的机制。

被禁用的变量提升
let 和 const区别与var的一个重要特征就是 不存在变量提升

console.log(a)
let a = 10; // 报错 a is not deefined

块级作用域
块作用域是伴随着ES6而生的一个概念,我们把一对花括号括起来的代码叫做代码块 也就是 块作用域

	{
		let a = 10
		console.log(a)
	}

暂时性死区
在ES6中明确规定:如果区块中有 let 和 const命令,这个区块对命令声明的变量,从一开始就形成了封闭的作用域 如果在声明前去使用这些变量,那么就会报错 ,这一段会报错的危险区域我们叫做 暂时性死区

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值