js預編譯(AO對象;GO對象)


復習

一.函數:(封裝一段代碼):高內聚;低耦合(重復代碼);

二.普通的基本數據類型:

boolean             布爾類型

string                 字符串類型

number              數字類型

undefined           空

null                 空

引用數據類型:object

三.函數也是一個對象

什么加對象呢?

對象就是有自己的屬性與方法(方法是一種特殊的很屬性,作為函數的時候,我們稱之為方法)

舉個例子:

function fun(n1,n2){}

fun.length="形參的個數"

fun.name="函數名"

fun.prototype="類型名"

 

四.函數聲明與函數表達式

函數聲明:function fun(){}

函數表達式:var fun1=function(){}

 

五.js的特點(在JS中有且只有一種情況不聲明,type.of)

(1).弱類型

(2).解釋型

(3).逐行執行

(4).變量聲明提前,函數聲明整體提前

 

六.js的執行過程

(1).語法檢測

(2).預編譯

(3).逐行執行

 

七.在函數中有一些看不到的屬性[[scope]] (作用域)

作用域:(1):全局作用域

        (2):函數作用域(局部作用域)

 

八.JS預編譯——全局(在逐行執行;語法檢測之前)(GO)

 

var a function fun(){ } function abc(){ } function a(){ } console.log(a); var a = 100; console.log(a); }

 

 

 

(1):會生成一個對象(GO),這個對象封裝的就是作用域,稱為GO(global  object)。當全部掛載完成之后,然后代碼在去逐行執行

                                      GO={

                                            }

(2):分析變量聲明(var)——變量作為GO對象的屬性名,值為undefined

                                      GO={

                                        a:undefined;

                                            }

(3):分析函數聲明(function)——函數名作為GO對象的屬性名,值為函數體(如果遇到同名,直接覆蓋)

                                      GO={

                                       a:undefined,

                                       fun:function fun(){},

                                       abc:function abc(){}

                                                                                                                         

}

(4):當走到某一行的時候;a產生了一次賦值;此時GO對象變成了:

                                     GO={

                                     a:100,

                                     fun:function fun(){}

                                     abc:function;                      

 

 

}

(5):逐行執行(看着GO對象里面的執行)

九.AO(活動對象)

 

 var num = 100; function fun(num){ console.log(num); } fun(5);

 

 

 

九.AO

什么是AO:是函數執行前的一瞬間,生成一個AO對象(在函數執行前的一瞬間會生成自己的AO,如果函數執行2次,生成了兩次AO,這兩次的AO是沒有任何關聯)

(1):執行前的一瞬間,會生成一個AO(action object)對象

(2).分析參數,形參作為AO對象的屬性名,實參作為AO對象的屬性值
(3).分析var變量聲明,變量名作為AO對象的屬性名,值為undefined,如果遇到同名的,不去做任何改變

(4).分析函數聲明,函數名作為AO對象的屬性名,值為函數體,如果遇到同名的,直接覆蓋

1.分析GO 1.1生成自己的GO對象 GO = {} 1.2 var GO = { num : undefined } 1.3 函數聲明 GO = { num : undefined fun : function } 2.逐行執行 此時 發生了一次賦值 GO = { num : 100 fun : function } 走到第22行 函數fun調用 1.調用前的一瞬間 生成fun.AO對象 AO = {} 2.分析參數 AO = { num : 5 } 3.分析變量聲明 沒有略過 4.分析函數聲明 沒有略過 AO = { num : 5 } 開始逐行執行

 

 

 

  

 

                                    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM