此为本人学习B站pink老师JS所做的笔记,有些过时-仅做笔记
预解析是指:在执行之前 将变量和函数的声明提升到作用于最前面
1.JS引擎运行JS分为两步: 预解析 代码执行
(1) 预解析 JS引擎会将JS里面所有的 var(实测let不会) 还有 function的声明提升到当前作用域最前面
(2) 代码执行 按照代码书写的顺序从上到下依次执行
2.预解析分为 变量预解析(变量提升) 和函数预解析(函数提升)
(1) 变量提升 就是把 变量声明 提升到当前作用域最前面 不提升赋值操作
(2) 函数提升 就是把 函数声明 提升到当前作用域最前面 不调用操作
函数表达式提升变量,并且函数表达式调用只能写在函数表达式下面
1.函数提升
fun();
function fun(){
console.log(10)
}
fun();
实际上代码会解析成:
function fun(){
console.log(10)
}
fun();
fun();
2.变量提升
1.普通变量
console.log(num)
var num = 10;
实际代码解析为:
var num;
console.log(num)
num = 10;
2.函数表达式
func();
var func = function (){
console.log("函数表达式不可提前执行")
}
func();
函数表达式可理解为变量,只是存储的是函数
解析为:
var func;
func();
func = function(){
console.log("函数表达式不可提前执行")
}
func();
3.经典题
f1();
console.log(b);
console.log(c);
console.log(a);
function f1(){
var a = b = c = 9;
console.log(a)
console.log(b)
console.log(c);
}
代码实际解析为:
function f1(){
var a;
a = b = c = 9;
console.log(a)
console.log(b)
console.log(c);
}
f1();
console.log(b);
console.log(c);
console.log(a);