学习笔记,仅供参考,有错必纠
参考自:pink老师教案
文章目录
预解析
预解析概述
js引擎运行js代码分为两步:
- 预解析:js引擎会把js 里面所有的
var
还有function
提升到当前作用域的最前面 - 代码执行:按照代码书写的顺序从上往下执行
预解析又分为:
- 变量预解析(变量提升):就是把所有的变量声明提升到当前作用域的最前面,但不提升赋值操作
- 函数预解析(函数提升):就是把所有的函数声明提升到当前作用域的最前面,但不调用函数
预解析案例
案例1
var num = 10;
fun();
function fun() {
console.log(num);
var num = 20;
}
相当于执行了以下操作:
var num;
function fun() {
var num;
console.log(num);
num = 20;
}
num = 10;
fun();
案例2
var num = 10;
function fn() {
console.log(num);
var num = 20;
console.log(num);
}
fn();
相当于以下代码:
var num;
function fn() {
var num;
console.log(num);
num = 20;
console.log(num);
}
num = 10;
fn();
案例3
var a = 18;
f1();
function f1() {
var b = 9;
console.log(a);
console.log(b);
var a = '123';
}
相当于以下代码:
var a;
function f1() {
var b;
var a;
b = 9;
console.log(a);
console.log(b);
a = '123';
}
a = 18;
f1();
案例4
f1();
console.log(c);
console.log(b);
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;
// 相当于 var a = 9; b = 9; c = 9; b 和 c 直接赋值 没有var 声明 当 全局变量看
// 集体声明 var a = 9, b = 9, c = 9;
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);