指令碼的預編譯

2021-09-24 08:25:45 字數 1384 閱讀 2003

預編譯是js語言的難點重點之一,難點在於不便理解,重點在於必須掌握。

預編譯實際上就是js引擎的兩次掃瞄,第一次掃瞄是檢測宣告,第二次掃瞄是執行**。

預編譯分為指令碼的預編譯和函式呼叫的預編譯,先來說說指令碼的預編譯。

1.建立全域性物件go(globalobject)

2.載入指令碼檔案

3.預編譯:

4.解析執行**

1.沒有var的變數,都不是變數宣告,全部認為是window的全域性變數,不參與預編譯。

// console.log(aa); // uncaught referenceerror: aa is not defined

aa = 5;

console.log(aa); // 5

複製**

2.即使在函式中,aa也是全域性變數。(執行時)

test();

function

test()

console.log(aa); // 5

複製**

3.指令碼中的所有宣告變數,在指令碼預編譯階段完成,所有變數的宣告與實際書寫位置無關。

console.log(aa); // undefined

var aa = 5;

console.log(aa); // 5

複製**

4.指令碼中的所有函式宣告,在指令碼預編譯階段完成,所有函式宣告與實際書寫位置無關。

console.log(hh); // f hh()

function

hh()

複製**

5.指令碼中,如果變數與函式同名,那麼將覆蓋變數。

console.log(haha); // f haha()

var haha = 123;

function

haha()

複製**

6.指令碼中,只有函式能夠覆蓋變數,但是變數無法覆蓋函式。(注意:由5,6可知,函式優先順序大於變數!)

console.log(haha); // f haha()

function

haha()

var haha = 123;

複製**

7.指令碼中,後面的函式宣告會覆蓋前面的函式宣告,並且忽略引數。

haha(1); // 'haha2'

function

haha(a)

function

haha(b,c)

複製**

JS預編譯 函式預編譯和全域性預編譯

預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...

mysql 預編譯的好處 MySQL的預編譯功能

1 預編譯的好處 大家平時都使用過jdbc中的preparedstatement介面,它有預編譯功能。什麼是預編譯功能呢?它有什麼好處呢?當客戶傳送一條sql語句給伺服器後,伺服器總是需要校驗sql語句的語法格式是否正確,然後把sql語句編譯成可執行的函式,最後才是執行sql語句。其中校驗語法,和編...

預編譯與編譯

一c c 源 從最初的文字變為可執行檔案主要進行三大步 預編譯階段 主要是編譯器執行 文字處理工作,並不會進行語法檢查 主要執行三大類預編譯命令 巨集定義 文字替換功能,將使用了巨集的地方採取巨集定義方式直接展開 條件編譯 文字剪下功能,根據設定的條件選擇性刪除一些 片段 包含檔案 文字插入功能 i...