他是一個類數組的對象,有length屬性,不是數組,它的內容是函數運行時的實參列表
即srguments可以獲取函數運行時收到的實參個數(在多態裏可以用到)它收集的是‘所有’的實參,即使沒有與之相對應的形參
而形參與對應的arguments單元,其實是相互映射的,互相影響
arguments.callee屬性代表當前運行的函數
問題:匿名函數,不用callee 完成遞歸
函數運行期內,關鍵的三個對象:
AO z本函數AO上沒有某屬性,則繼續去外層函數的AO上找,直到全局對象,叫做作用域鏈;
arguments 每個函數都有自己的callee, 但不向外層找arguments的相關屬性,即不形成鏈;
this 對象
js中函數的4中調用方式
1.普通函數來調用,this的值null,但被解釋成window
在ECMAScript6標準中,如果this爲null,則解釋爲undefined;
2,作爲對象的方法來調用,this指向方法的調用者,即該對象
作爲方法調用時,this指向其調用那一刻的調用者,母體對象,不管被調用函數,聲明時屬於方法還是函數
3,函數作爲構造函數調用時,js 中沒有類的概念,創建對象是用構造函數來完成,或者直接字面量的方式 json 格式來完成創建對象
4 new Dog 發生了一下幾個步驟
a:系統創建空對象{},(空對象constructor屬性指向Dog函數)
b:把函數的this 指向該空對象
c:執行該函數;
d:返回該對象
函數作爲構造函數來執行時,return的值是忽略的,返回的仍舊是一個對象
函數被call, apply 調用時
語法格式:函數fn.call(對象obj,參數1,參數2,......參數n);
運行如下:fn函數中的this ---指向---》對象obj
運行fn(參數1,參數2.,.... 參數n)