一.js解析
js解释引擎:词法分析->语法分析->语法树
词法分析是将字符流(char stream)转换为记号流(token stream)
比如var for if这些关键字会标记出来
js解析:预编译期(预处理、预解析、预编译)与执行期
在预编译期,当javaScript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理
二.js变量提升
在预编译期,变量声明提前(值留在本地),函数声明提前(整个代码体提前)
如:
console.log(a); //undefined
var a = 10;
console.log(a); //10
function fu(){}
function test(){
a=100;
console.log(a); //100
var a;
console.log(fu) //function fu(){}
}
编译后的代码做了变量提升:
var a;
console.log(a);
a=10;
console.log(a);
//function fu(){}
function test(){
//函数内部只做函数内部的提前
var a;
a=100;
console.log(a); //100
console.log(fu) //function fu(){},会全局去找
console.log(fu) //如果是var fu = function的话则打印的是undefined
}
test();
//var fu = function(){}