JavaScript的預編譯
JavaScript是一種腳本語言,如果沒有弄清預編譯的程序,會形成誤區,從而出現一些問題,
全域的預編譯
一般理解的預編譯就是檢查語法錯誤,記憶體會開辟一部分地址,用來存放物件,了解一些細節,可能會更好地理解預編譯:
1. 全域物件(global object):瀏覽器引擎首先會生成GO物件,并定義一些初始屬性,比如全域屬性、全域函式等等,這些屬性js程式都可以使用;
2. 決議宣告的變數:
比如下面的程式:
//code1
var b ;
console.log(b) // undefined
//code2
console.log(a) // undefined
var a = 5 ;
console.log(a) // 5
預編譯時,變數以undefined的形式存盤,
你看到的代碼塊:
//code3
console.log(a) // undefined
var a = 5;
console.log(a) // 5
var b = 3
實際執行的順序:
//code4
var a ;
var b ;
console.log(a) ;
a = 5 ;
console.log(a) ;
b = 3
所以code2的第一個列印是undefined,
3.決議函式宣告:
存盤函式名和函式體,如果函式名和變數名相同,則會覆寫,
var a;
function a() {
}
console.log(a)//? a() {}
函式的預編譯(區域)
函式預編譯發生在函式執行的前一刻,
活動物件(active object):函式呼叫,也會生成作用域,
- 分析引數,決議形參和實參;
- 分析變數,和全域預編譯的變數相同;
- 分析函式宣告,也可以理解為物件,函式名為屬性名,函式體為值;
- 匿名函式不參與預編譯,
理解 預編譯 能對作用域,this指向等方面有更好的理解
–
Global物件中有
unescape();
對由 escape() 編碼的字串進行解碼, 把亂碼變中文
var str = '%u5927%u50BB%u903C';
alert(unescape(str))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/250236.html
標籤:其他
下一篇:性能優化之回流重繪
