1、js引擎分为两部 :预解析 代码执行
- 预解析js引擎会把 js 里面所有的 var 还有 function 提升到当前作用域的最前面
- 代码执行 按照代码书写的顺序从上往下执行
2、预解析分为 变量预解析(变量提升)和 函数预解析(函数提升)
- 变量提升 就是把所有的变量提升到当前的作用域最前面 不提升赋值操作
- 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
// 代码预解 代码执行
// 1 问
console.log(num);
// 2 问
console.log(num); // undefined
var num = 10;
// 3 问
fn();
function (){
console.log(11);
}
// 4 问
fun(); // 报错
var fun = function(){
console.log(22);
}
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var 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);
}
// 相当于
function f1() {
var a = b = c = 9;
console.log(a); // 9
console.log(b); // 9
console.log(c); // 9
}
f1();
console.log(c); // 9
console.log(b); // 9
console.log(a); // undefined