首頁  >  文章  >  web前端  >  Javascript中的arguments與重載介紹_javascript技巧

Javascript中的arguments與重載介紹_javascript技巧

WBOY
WBOY原創
2016-05-16 16:09:131184瀏覽

因為語言上的設計錯誤,arguments可以被當成一個陣列。

複製程式碼 程式碼如下:

function zero () {
    console.log(arguments[0]);
}

也會有
複製程式碼 程式碼如下:

function zero () {
  for(var i=0;i      console.log(arguments[i]);
  }
}

它利用了Javascript的一個事實,即Javasc

而這裡的arguments變數則為實參提供了一個類似陣列的介面。因為這裡的arguments的可變參數,我們可以利用這個有趣的東西來做一些有趣的事,例如重載。

Javscript 重載

stackvoerflow上有一個關於重載的問題,於是有了第一個答案

複製程式碼 程式碼如下:

if (typeof friend === "undefined") {

} else {

}

還有一個答案則是

複製程式碼 程式碼如下:

switch (arguments.length) {
case 0:
    //Probably error
    break;
case 1:
    //Do something
    break;
case 2:
default: //Fall through to handle case of more parameters
    //Do something else
    break;
}

只是這種方式真的不好看,難道我們的函數最後要變成這樣子的?

複製程式碼 程式碼如下:

function zero1 (){
    console.log('arguments 1')
};
function zero2 (){
    console.log('arguments 2')
};
function zero () {
  if(arguments.length == 1){
    zero1();
  } else{
    zero2();
  }
}

真的一點都不好看,就算我們換個switch..case,也不好看啊。

Javascript arguments不是一個陣列

arguments不是向我們看到的那樣一直是一個數組,有時候可能不是。

複製程式碼 程式碼如下:

function hello(){
    console.log(typeof arguments);
}

這裡arguments的型別是一個對象,雖然陣列的型別也是一個對象,雖然我們可以將之轉換為一個陣列
複製程式碼 程式碼如下:

var args = Array.prototype.slice.call(arguments);

但這也顯示了這不是數組,它擁有的只有Array的唯一一個屬性,即length。除此之外還有

arguments.callee

Reference to the currently executing function.

arguments.caller

Reference to the function that invoked the currently executing function.

arguments.length

Reference to the number of arguments passed to the function.

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn