javascript关于变量提升的问题

js在声明一个变量时(var foo= 1)会分两步走。

第一步是var foo,(这一步是在为这个变量开辟一处内存空间并命名)
第二步是foo= 1,(这一步则是为开辟好并命了名的内存空间赋值)

但这两步并不是同时进行的,var foo这一步是在编译阶段进行,而foo= 1则是在执行阶段进行。简单来说,就是var foo这步是在浏览器一行行读js代码前执行的,而foo= 1则是留在你写的位置等待被执行的。所以如果代码里有不少变量,那么代码的一开始其实是这样的

var foo;
var a;
let b;
const c;

接下来就是等浏览器到读js代码到foo= 1时,才会为foo这个变量附上值
而先为变量声明内存空间后赋值的这个行为就被称为变量提升

这就解释了为什么下面代码会打印undefined

console.log( a );//undefined
var a = 2;

因为实际上代码是这样的

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

这样已经声明了a却没有为a赋值,自然会输出undefined

只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。如果提升改变
了代码执行的顺序,会造成非常严重的破坏!

by the way, 是在var foo =1这句代码的定义域里提升,不会全部变量提升到最大的那个定义域

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值