详解JS中的声明提升

前言:  JS的V8引擎  具有超高的智能化设定 - 会自动把用户书写的错误的代码 按照固定的规则 修复后再执行;

先来了解一下JS中隐式转换的规则: 数学运算表达式中, 理论上参与运算的值 需要是数字类型;

例如: 这里两个打印, 会隐式转换;

 所以我们来看一下打印的结果: 12 * 1 = 12     12 * 0 = 0

 声明提升

前言: 变量和函数的声明, 会在JS代码编译阶段被放入内存中, 简单来说首先把变量和函数的声明读取到所在作用域的顶部 然后执行剩余的代码;

变量声明

仅提升声明部分到顶部, 不提升赋值操作

var: 提升后的默认值为undefined, 但是赋值前可以使用

let/const: 提升后的默认值为undefined, 但是也有人认为不提升, 理由如下:

在声明函数执行之前, 变量处于暂存死区状态  (暂存死区:  作用域中知道这些变量的存在, 但是在声明函数执行之前无法使用), 这里我也用浏览器断点功能实验过, 确实如此! ! !

---------------------------------------------------------------------------------------------------------------------------------

 上图所示, 在打印结果的下面用var声明了a, 但是赋给a的值写在了打印结果的上方, 所以打印的结果依旧是10; 就如前言所说JS代码在执行的时候把变量和函数读取到了当前作用域的顶部, 然后才会执行剩余代码;

 此自动化操作: 称为声明提升;

如果有其它疑问的, 可以使用浏览器断点的功能来观察;

 函数声明

提升整个函数到顶部, 提升优先级比变量要高;

首先来看一下这道题

输出结果是什么?思考3秒钟噢~

 如上图所示, 简单的画了一个草图, 代码执行时会把整个函数提升到顶部, 调用结果在下方, 所以两个的结果都是2

 

 上面这些就是JS中的声明提升; 如果感觉这篇文章还不错, 可以留下关注哦! 每天都会更新! ! !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值