前言: JS的V8引擎 具有超高的智能化设定 - 会自动把用户书写的错误的代码 按照固定的规则 修复后再执行;
先来了解一下JS中隐式转换的规则: 数学运算表达式中, 理论上参与运算的值 需要是数字类型;
例如: 这里两个打印, 会隐式转换;
所以我们来看一下打印的结果: 12 * 1 = 12 12 * 0 = 0
声明提升
前言: 变量和函数的声明, 会在JS代码编译阶段被放入内存中, 简单来说首先把变量和函数的声明读取到所在作用域的顶部 然后执行剩余的代码;
变量声明
仅提升声明部分到顶部, 不提升赋值操作
var: 提升后的默认值为undefined, 但是赋值前可以使用
let/const: 提升后的默认值为undefined, 但是也有人认为不提升, 理由如下:
在声明函数执行之前, 变量处于暂存死区状态 (暂存死区: 作用域中知道这些变量的存在, 但是在声明函数执行之前无法使用), 这里我也用浏览器断点功能实验过, 确实如此! ! !
---------------------------------------------------------------------------------------------------------------------------------
上图所示, 在打印结果的下面用var声明了a, 但是赋给a的值写在了打印结果的上方, 所以打印的结果依旧是10; 就如前言所说JS代码在执行的时候把变量和函数读取到了当前作用域的顶部, 然后才会执行剩余代码;
此自动化操作: 称为声明提升;
如果有其它疑问的, 可以使用浏览器断点的功能来观察;
函数声明
提升整个函数到顶部, 提升优先级比变量要高;
首先来看一下这道题
输出结果是什么?思考3秒钟噢~
如上图所示, 简单的画了一个草图, 代码执行时会把整个函数提升到顶部, 调用结果在下方, 所以两个的结果都是2
上面这些就是JS中的声明提升; 如果感觉这篇文章还不错, 可以留下关注哦! 每天都会更新! ! !