JS 变量提升

目录

一、变量是什么?为什么提升?有什么现象?

二、对比其他声明有什么不同?

三、 为什么会有变量提升? 本质意义在哪里?


一、变量是什么?为什么提升?有什么现象?

                a. 使用var和function 生命赋值的时候,在声明前就能那倒var声明的变量,但变量的值                      会  为undefined, 在函数声明前就能调用function。这个现象就叫做声明提升!

                b.  只会提升声明,不会提升初始化。

二、对比其他声明有什么不同?

                a.  只有var和function有声明提升! ES6 const let 理论上也是有声明提升的,但是因为                     加入了一个暂时性死区机制(劫持了当前块级作用域), 使得最终效果没有变量提升

三、 为什么会有变量提升? 本质意义在哪里?

                a.  变量声明是由JS 引擎在编译阶段,会将 var 和 function 记录到 vo (Variable Object, 简称 VO ,现在放在 variable Environment 变量环境) , 并且下一步给var赋值为undefined, function赋值为函数主体。从而造成了运行的时候在变量声明之前就能拿到变量,并且值 undefined , 而 function 能在声明之前调用。 当 function和var 同时提升的时候, function会比var更靠前。最早JS设计的时候,是希望在当前作用域任何一个地方访问函数或者变量的时候都不会报错,JS引擎的var提升是早期设计的疏漏,

而 function 的提升是为了解决无法互相递归调用的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值