脚本宝典收集整理的这篇文章主要介绍了变量提升的原理,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
当程序执行这一段代码时
console.LOG(a);
VAR a = 2;
有经验的同学都知道控制台会输出undefined
而不是报错a is not defined
这是因为此时发生了变量提升,代码可以理解为以下形式
var a;
console.log(a);// undefined
a = 2;
这是为什么呢,让我先说明以下几点
每当编译器遇到var xxx
,都会去查找当前作用域是否已存在变量xxx
,如果xxx
已存在,则忽略该声明,反之,在当前作用域声明变量xxx
。
所以当成程序执行下面代码时
console.log(a);
var a = 2;
- 首先编译器查找当前作用域是否存在变量
a
,发现a
并不存在,声明变量a
。
- 再由引擎执行由编译器生成的代码
console.log(a)
,此时变量a
已经被编译器声明,但是还未被赋值,所以此时控制台输出的值是undefined
。
-
a = 2
,此时变量a的值为2。
其实关键点就在于,由var
关键字声明的变量是在编译阶段
声明的,所以会出现变量提升的情况。
但是编译器对ES6语法中的const
和let
关键字声明的变量则不会提前声明,所以不会出现变量提升。
以上是脚本宝典为你收集整理的变量提升的原理全部内容,希望文章能够帮你解决变量提升的原理所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。