函式預編譯

2021-10-01 19:46:20 字數 1153 閱讀 9515

函式預編譯

函式預編譯的步驟

1 語法分析

2 預編譯

3 解釋執行

當函式執行時,會建立乙個稱為執行期上下文的內部物件(go和ao)。乙個執行期上下文定義了乙個函式執行時的環境,函式每次執行時對應的執行上下文都是獨一無二的,所以多次呼叫乙個函式會導致多個執行上下文,當函式執行完畢,它所產生的執行上下文被銷毀。

列如以下例子

1,var a = 1; console.log(a);//a = 10

2,a = 10; console.log(a);a = 10;

3,console.log(a);

//報錯,a未定義

綜上所述

在函式執行前會發生以下四個步驟

函式在執行的瞬間,生成乙個執行期上下文 (active object),簡稱aoao{}

分析引數

2.1 函式接收形式引數,新增到ao的屬性,並且這個時候值為undefine,例如ao.a=undefined;

2.2 接收實參,新增到ao的屬性,覆蓋之前的undefined;在程式中找出形參和所有的變數宣告,並將形參名和變數名作為屬性存放到ao物件中,形參為fn(a)中的a,變數宣告有:var a;var b;

並且屬性名的值為undefined

注意:此處的形參為a,變數名也存在a,但在ao物件中存放時,如有相同的名稱,那僅放一次即可。

因此ao物件為:ao實參和形參進行統一,即將實參的值賦給形參

形參為a,實參為1,

因此ao物件為:

ao

(1) 建立ao物件;(全域性建立的為go===window)

(2) 找形參和變數宣告,將形參和變數宣告作為ao屬性名,值為undefined;

(3) 將實參值和形參統一;

(4) 在函式體裡面找函式宣告,值賦予函式體;

2.建構函式:

(1) 用法:function test() {};

var test=new tset();

(2) .prototyppe; 原型屬性

(3) .constructor; 目標函式

(4)proto

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

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

JS 函式預編譯

1 語法分析 2 預編譯 3 解釋執行 預編譯四部曲 1.函式在執行的瞬間,生成乙個執行期上下文 active object 簡稱ao 2.分析引數 2.1 函式接收形式引數,新增到ao的屬性,並且這個時候值為undefine,例如ao.age undefined 2.2 接收實參,新增到ao的屬性...

JavaScript預編譯(函式)

知識點預習 1 js檔案的執行三部曲 語法分析 預編譯 解釋執行。2 變數未經宣告就使用,系統會報錯。3 var aa 夫 子 變數的宣告和賦值,aa為變數名,夫 子 是變數值。var aa是變數的宣告,aa 夫 子 是變數賦值。4 函式宣告 function demo 函式表示式 var demo...