031|JavaScript arguments對(duì)象

上一節(jié)中,我們使用默認(rèn)參數(shù)特性處理了調(diào)用者未傳參數(shù)的問(wèn)題。

這一節(jié)中,我們將要處理調(diào)用者傳遞了參數(shù),但函數(shù)未定義參數(shù)的情況。

使用arguments訪問(wèn)參數(shù)

我們先來(lái)分析一下以下代碼:

function sayHi()
{
    console.log("Hello somebody!")
}

sayHi("James")

上述代碼中,sayHi()函數(shù)并未定義任何一個(gè)參數(shù),但調(diào)用者卻傳遞了參數(shù)"James"。這個(gè)腳本會(huì)報(bào)錯(cuò)嗎?我們嘗試運(yùn)行一下:

腳本運(yùn)行結(jié)果

可以看到,上面腳本并無(wú)任何異常,而是正常地輸出了"Hello somebody!"。

由上例可知,調(diào)用者可不管不顧函數(shù)到底定義了多少參數(shù),可以隨意填寫(xiě)參數(shù)。

在函數(shù)體內(nèi), 有一個(gè)變量,存儲(chǔ)著傳遞給當(dāng)前函數(shù)的所有參數(shù),它就是arguments。arguments是一個(gè)數(shù)組,依次存儲(chǔ)著調(diào)用者向函數(shù)傳遞的參數(shù)。
我們通過(guò)將上述代碼改造一下來(lái)了解arguments變量:

function sayHi()
{
    console.log("Hello "+arguments[0]+"!") // 通過(guò)arguments[0]引用第一個(gè)參數(shù)
}

sayHi("James")

上述代碼中,使用arguments[0]引用了第一個(gè)參數(shù)James。所以程序最終輸出如下:

運(yùn)行結(jié)果

所以,通過(guò)arguments對(duì)象能夠引用調(diào)用者傳遞的參數(shù)。

使用arguments解決不定長(zhǎng)參數(shù)的問(wèn)題

arguments的一個(gè)重要作用是解決變長(zhǎng)參數(shù)的問(wèn)題。

現(xiàn)在,你需要寫(xiě)一個(gè)函數(shù),它能將傳遞進(jìn)來(lái)的參數(shù)全部打印出來(lái)。例如:
···
function sayHi(){
// 你需要實(shí)現(xiàn)這個(gè)函數(shù)
}
sayHi("David") // 1個(gè)參數(shù)
sayHi("David", "James") // 2個(gè)參數(shù)
...
sayHi("David", "James", ... , "Lucy") // N個(gè)參數(shù)
···

函數(shù)定義時(shí),參數(shù)個(gè)數(shù)是固定的,而上述問(wèn)題中,調(diào)用者傳遞參數(shù)是變動(dòng)的。所以普通函數(shù)參數(shù)無(wú)法解決上述問(wèn)題。這時(shí)就到arguments發(fā)揮作用的時(shí)候了。

函數(shù)剩余參數(shù)也能解決上述問(wèn)題。后續(xù)課程中將會(huì)介紹 。

讓我們來(lái)看一上arguments的解決方案:

function sayHi()
{
  for (var i = 0; i < arguments.length; i++)
  {
      console.log("Hello "+arguments[i]+"!")
  }
}
sayHi("David") // 1個(gè)參數(shù)
sayHi("David", "James") // 2個(gè)參數(shù)
sayHi("David", "James", "Lucy") // N個(gè)參數(shù)

我們來(lái)看看輸出結(jié)果 :

變長(zhǎng)參數(shù)問(wèn)題

可以看到,通過(guò)使用arguments參數(shù),我們成功解決了變長(zhǎng)參數(shù)問(wèn)題。

好了,這一節(jié)就講到這里。今天,你學(xué)到了一個(gè)非常實(shí)用的技巧!

什么是匿名函數(shù)?什么是函數(shù)調(diào)用棧?什么是函數(shù)剩余參數(shù)?

請(qǐng)繼續(xù)關(guān)注我的課程,我將在后續(xù)課程中為大家解答上述問(wèn)題。

想學(xué)計(jì)算機(jī)技術(shù)嗎?需要1對(duì)1專(zhuān)業(yè)級(jí)導(dǎo)師指導(dǎo)嗎?想要團(tuán)隊(duì)陪你一起進(jìn)步嗎?歡迎加我為好友!

我的微信
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容