预解析
JavaScript代码是由浏览器中的JavaScript解析器(引擎)来执行的;JS解析器在运行JavaScript代码的时候分为两步:预解析
和代码执行
-
代码执行:按照代码书写的顺序从上往下执行
-
预解析JS引擎会把js里面所有的var 还有function提升到当前作用域的最前面
-
预解析分为
变量预解析(变量提升)
和函数预解析(函数提升)
变量预解析
- 变量提升:把所有的变量声明提升到当前的作用域最前面,不提升赋值操作
- 代码示例:
console.log(num);//undefined;变量提升
var num = 10;
// 相当于执行了以下代码
// var num;
// console.log(
函数预解析
- 函数提升:就是把所有的函数声明提升到当前作用域的最前面 ,不调用函数
- 代码示例:
fn();//22
function fn(){
console.log(22);
}
// 相当于执行了以下代码:函数提升
// function fn(){
// console.log(22);
// }
// fn();
fn1();//报错
var fn1 = function(){
console.log(11);
}
// 函数表达式调用必须写在函数表达式的下面
// 相当于执行了以下代码
// var fn1;
// fn1();
// fn1 = function(){
// console.log(11);
// }
预解析案例
- 案例结果置于文末
- 注意案例四种的:var a = b = c = 9等价于var a = 9;b=9;c=9;
- 案例1结果:undefined
- 案例2结果:undefined 20
- 案例3结果:undefined 9
- 案例4结果:9 9 9 9 9 报错