js程序員必需熟悉的arguments對象屬性

2016-12-07 1604 1 編輯:網站前端設計伍林 來源:前端網站設計

arguments 是JavaScript里的一個內置對象,它很古怪,也經常被人所忽視,但實際上是很重要的。

所有主要的js函數庫都利用了arguments對象。

所有的函數都有屬于自己的一個arguments對象,它包括了函所要調用的參數。

他不是一個數組,而是一個類數組對象,  

如果用typeof arguments,返回的是'object'。

雖然我們可以用調用數據的方法來調用arguments。比如length,還有index方法。但是數 組的push和pop對象是不適用的。

看起來貌似argument對象使用起來十分有限,但是實際上它是一個非常有用的對象。

你可以通過使用argument對象讓函數能夠調用數量不定 的參數。  

也就是說arguments對象的長度是由實參個數而不是形參個數決定的。

形參是函數內部重新開辟內存空間存儲的變量,但是其與arguments對象內存空間并不重疊。

對于arguments和值都存在的情況下,兩者值是同步的,但是針對其中一個無值的情況下,對于此無值的情形值不會得以同步。

如下代碼可以得以驗證。

function f(a, b, c){

    alert(arguments.length);   // result: "2"

    a = 100;

    alert(arguments[0]);       // result: "100"

    arguments[0] = "qqyumidi";

    alert(a);                  // result: "qqyumidi"

    alert(c);                  // result: "undefined"

    c = 2012;

    alert(arguments[2]);       // result: "undefined"

}

f(1, 2);    


arguments.callee

arguments對象中有一個非常有用的屬性:callee。arguments.callee返回此arguments對象所在的當前函數引用。

我們知道, 遞歸函數必須能夠引用它本身。很典型的,函數通過自己的名字調用自己。

然而,匿名函數 (通過 函數表達式 或者 函數構造器 創建) 沒有名稱。

因此如果沒有可訪問的變量指向該函數,唯一能引用它的方式就是通過 arguments.callee。

function create() {

   return function(n) {

      if (n <= 1)

         return 1;

      return n * arguments.callee(n - 1);

   };

}

var result = create()(5); // returns 120 (5 * 4 * 3 * 2 * 1)

對于有名字的函數, 在使用函數遞歸調用時也推薦使用arguments.callee代替函數名本身。

注意:arguments.callee被從 ES5 嚴格模式中移除掉了!

網頁設計

本站文章均為深正網站建設摘自權威資料,書籍,或網絡原創文章,如有版權糾紛或者違規問題,請即刻聯系我們刪除,我們歡迎您分享,引用和轉載,但謝絕直接搬磚和抄襲!感謝...
關注深正互聯
我們猜你喜歡
七星彩头尾