arguments和this

他是一個類數組的對象,有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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章