js引擎运行js分成两部:预解析 代码执行
预解析——js引擎会把js里面所有的var还有function提升到当前作用域最前面
代码执行——按照代码书写的顺序从上往下执行
预解析又分成变量预解析(变量提升)和函数预解析(函数提升)
变量提升——就是把所有变量声明提升到当前的作用域最前面 不提升赋值操作
函数提升——就是把所有的函数声明提升到当前作用于的最前面 不调用函数
var num = 10;
function fn (){
console.log(num);
var num = 20;
console.log(num);
}
fn();
//输出结果为 undefined 20
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声明当全局变量看
console.log(a)
console.log(b)
console.log(c)
}
//最终打印结果为9 9 9 9 9 9 报错