js解析:预编译期(预处理,预解析,预编译)和执行期
预编译预解析,当javaScript引擎解析脚本时、,它会在预编译期对所有声明的变量和函数进行处理,并且是先预声明变量再预定义函数。
变量声明提前,函数声明提前,变量声明提前值留在本地。函数是整个代码体提前,注意如果是var fn 声明的只是变量提前,函数体停留在本地。
console.log(a)//undefined
var a =10
function fn() {}
function test(){ //hoist 声明提前
a =100;
console.log(a);
console.log(fn)
}
test();
console.log(a);
test()没写或者隐藏时,这里面提前的只是 var a 变量 var a=10 就变成了var a a=10(值得位置不变,仅仅变量声明提前。整个函数提前,方法函数位置不动。)
在全局时候 他会把变量和函数提前到前面去。在函数内部只做函数内部得一个提前
变量声明提前,函数声明提前
变量声明提前,值停留在本地
函数是整个代码体提前,如果是var fn声明的只是变量提前,函数体停留在本地
js 解释执行
js解释引擎:词法分析->语法分析->语法树
词法分析是将字符流(char stream ) 转换为记号流(token stream)
语法分析成AST(语法树)
js解析:预编译期(预处理、预解析、预编译)与执行期
预编译预解析,当Javascript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理;并且是先预声明变量,再预定义函数
变量和函数提升
先提升变量,再提升函数