js的預解析
阿新 • • 發佈:2018-11-08
預解析:js解析器載入時,會首先檢查語法錯誤,後進行變數宣告提升和函式體宣告提升,解釋一行語句執行一行語句
1.檢查語法錯誤
2.變數宣告提升和函式體整體提升(變數提升時只提升變數名)
函式體中也有變數宣告提升和函式體宣告提升
console.log(a); //列印為undefined,var a;宣告提升
var a = 100;
console.log(a); //列印為100
fn();
function fn(){
console.log(b); //列印為undefined
var b = 20;
console.log(b); //列印為20}
console.log(c); //列印為undefined
var c = 100;
console.log(c); //列印為100
function fn(){
console.log(c); //列印為100
}
fn();
console.log(c); //列印為undefined var c = 100; console.log(c); //列印為100 function fn(){ console.log(c); //列印為undefined;自己函式體類的變數宣告提升 var c = 20; console.log(c); //列印為20,自己函式體內有變數c,就近原則,使用自己函式體內的變數 } fn();
console.log(d); //列印為undefined
var d = 100;
console.log(d); //列印為100
function fn(){
console.log(d); //列印為100
d = 20; //定義的為隱式全域性變數
console.log(d); //列印為20
}
fn();
console.log(a); //列印為undefined var a = 100; console.log(a); //列印為100 function fn(){ console.log(a); a = 20; //定義的為隱式全域性變數 console.log(a); } console.log(a); //列印為100 fn(); //在執行該語句時列印首先列印的是100(隱式變數宣告未提升,首先該語句執行時之前沒有找變數就從全域性找)和 //20(從自己的中找到個隱式全域性變數d,所以列印為20) console.log(a) //列印為20(函式數體中的隱式全域性變數覆蓋了外部的變數)
console.log(a); //列印為undefined
var a = 100;
console.log(a); //列印為100
fn(); //在執行該語句時列印首先列印的是100(隱式變數宣告未提升,首先該語句執行時之前沒有找變數就從全域性找)和
//20(從自己的中找到個隱式全域性變數d,所以列印為20)
console.log(a); // 列印20,被100值被覆蓋function fn(){console.log(a); a = 20; //定義的為隱式全域性變數console.log(a); }console.log(a); //列印為20
重要的是知道原理,不論在怎麼變都能夠明白