JS预解析
- JS解析器在运行JS代码时分两步: 预解析和代码执行
预解析 - JS引擎会把JS里面所有 var 和 function 提升到当前作用域的最前面 代码执行时, 按照代码书写的顺序从上往下执行
- 预解析分为变量预解析(变量提升) 和 函数预解析(函数提升)
例子1:
//1.输出结果--undefined var num = 10; fun(); function fun() { console.log(num); var num = 20; } //相当于执行了以下操作() var num; //提升num = 10那个 num function fun() { var num; //提升的是num = 20那个 num console.log(num); num = 20; } num = 10; fun();
例子2:
//2.输出结果--undefined, 20 var num = 10; function fn() { console.log(num); var num = 20; console.log(num); } fn(); //相当于以下代码 var num; //提升num = 10的 num function fn() { var num; //提升num = 20的 num console.log(num); num = 20; console.log(num); } num = 10; fn();
例子3:
//3.输出结果--undefined, 9; 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; //此时a = undefined, 就近原则, 待会儿log(a)取此值 b = 9; //b赋值为9 console.log(a); console.log(b); a = '123'; } a = 18; f1();
例子4:
//4.(典中典)以下代码 function f1() { //相当于 var = 9; b = 9; c = 9; b 和 c 直接赋值 没有var声明, 当 全局变量 看 //集体声明 var a = 9, b = 9, c = 9 var a = b = c = 9; console.log(a); console.log(b); console.log(c); } f1(); console.log(c); //全局变量c = 9 console.log(b); //全局变量b = 9 console.log(a); //局部变量a, 函数外不能使用
标签:function,console,log,JS,num,-----,var,解析 From: https://www.cnblogs.com/lyxnov/p/16848552.html