-.arguments的解釋:
1.是一個對象,是一個長的很像數組的對象
二.arguments内容是什麼?
1.arguments是函數運作時的實參清單
2.arguments收集的“所有”的實參,即使沒有與之相對應的形參,也可以用arguments來擷取任意多個的實參
3.形參與對應的arguments單元,其實是互相映射的,互相影響
4.arguments可以擷取函數運作時,收到的實參個數(在多态裡可以用到)
5.arguments.callee 屬性代表 “目前運作的函數”
三:函數運作期内,關鍵的三個對象
1.AO---》本函數A上沒有某屬相,則繼續去外層函數的AO上找,直到全局對象 叫做 作用域鍊
2.anguments---》 每個函數有自己的callee,但不向外層接着找 arguments 的相關屬性, 即不形成鍊
3.this的意思:
1.作為普通的函數來調用 this的值指向--》window 準确的說,this為null 解釋成window 在新的标準中this為null 則解釋成undefine
2.作為對象的方法來調用 this指向方法的調用者,即該對象 作為方法調用時,this指向其調用者,即母體對象
四:js中函數的4種調用狀态:
1.作為普通函數來調用, 準确的說this 為null,但被解釋成windows 在後來的标準中,如果this為null 則解釋為undefine
2.作為對象的方法來調用: this指向方法的調用者,即該對象 作為方法調用時,this指向其調用者,即母體對象
3.函數作為構造函數調用時: js中沒有類的概念 建立對象是用構造函數來完成,或者直接用json格式{}來寫對象
函數作為構造函數運作時,return 的值是忽略的,還是傳回對象。
4.函數通過call,apply 調用: 文法格式:函數.call(對象,參數1,參數2。。。參數N);
fn.call(對象obj,參數1,參數2,。。。參數N);
運作如下:
a):fn函數中的this--指向---》對象obj
b):運作fn(參數1,參數2,。。參數N);
五: var的定義:是函數運作的上下文中,聲明的一個變量。不加var 就是一個指派操作
六:詞法分析的過程:
0:AO={}
1:分析參數 AO={greet:undefined}
2:分析var聲明 (變量) greet變量聲明,AO已經有greet屬性,是以不做任何影響
3:分析greet函數聲明,AO.greet=function(){},被覆寫成函數
七:函數能使用的局部變量,分析3樣東西
1.先分析參數
2.再分析變量聲明
3.分析函數聲明
八:具體步驟:
0:函數運作前的1瞬間,生成Active Object(活動對象),下稱AO
1: 1.1函數聲明的參數,形成AO的屬性,值全是undefined
1.2接受實參,形成AO相應額屬相值
2:分析變量聲明 如var age
如果AO上沒有age 屬性,則添加AO屬相,值是undefined
如果AO上已經有age屬相,則不作任何影響
3:分析函數聲明 ,如 function foo(){},
則把函數賦給AO.foo屬性 注:如果以前foo屬性以存在,則被無情的覆寫了
九:function t1(){}和 t2=function(){}的差別:
1.這兩種方式,效果不同
2. t1是函數聲明,雖然全局内也得到一個t1變量,值是function
3.而t2隻是一個指派過程-----值是右側的表達式的傳回結果,即函數
4.是以,t1 t2兩種方式在詞法分析時,有着本質差別 前者 在詞法分析階段,就發揮作用, 後者在運作階段才發揮作用
十:作用域鍊:函數由内到外 所産生的AO