日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

函数 - 理解参数

發(fā)布時間:2024/4/15 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数 - 理解参数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

ECMAScript函數(shù)的參數(shù)與大多數(shù)其他語言中的函數(shù)參數(shù)有所不同。ECMAScript函數(shù)不介意傳遞進(jìn)來多少個參數(shù),也不在乎傳進(jìn)來參數(shù)是什么數(shù)據(jù)類型,也就是說,即使你定義的函數(shù)只接收兩個參數(shù),在調(diào)用這個函數(shù)時也未必一定要傳遞兩個參數(shù)。可以傳遞一個,三個甚至不傳遞參數(shù),而解析器永遠(yuǎn)不會有什么怨言,之所以會這樣,原因是ECMAScript中的參數(shù)在內(nèi)部是用一個數(shù)組來表示的。函數(shù)接收到的始終都是這個數(shù)組,而不關(guān)心數(shù)組中包含哪些參數(shù)(如果有參數(shù)的話)。如果這個數(shù)組中不包含任何元素,無所謂;如果包含多個元素,也沒問題。實際上,在函數(shù)體內(nèi)可以通過arguments對象來訪問這個參數(shù)數(shù)組,從而獲取傳遞參數(shù)的每一個參數(shù)。

其實,arguments對象只是數(shù)組類似(它并不是Array實例),因為可以使用方括號語法訪問它的一個元素(即第一個元素是arguments[0],第二個元素是argument[1],以此類推),使用length屬性來確定傳遞進(jìn)來多少個參數(shù)。在前面的例子中,sayHi()函數(shù)的第一個參數(shù)的名字叫name,而該參數(shù)的值也可以通過訪問arguments[0]來獲取。因此,那個函數(shù)也可以像下面這樣重寫,即不顯式地使用命名參數(shù):

function sayHi(){alert("hello"+arguments[0]+","+arguments[1]); }

這個重寫后的函數(shù)中不包含命名的參數(shù)。雖然沒有使用name和message標(biāo)識符,但函數(shù)的功能依舊。這個事實說明了ECMAScript函數(shù)的一個重要特點:命名參數(shù)只提供便利,但不是必須的。另外,在命名參數(shù)方面,其他語言可能事先創(chuàng)建一個函數(shù)簽名,而將來的調(diào)用必須與該簽名一致。但在ECMAScript中,沒有這些條條框框,解析器不會驗證命名參數(shù)。

通過訪問arguments對象的length屬性可以獲知有多少個參數(shù)傳遞給了函數(shù)。下面這個函數(shù)會在每次被調(diào)用的時,輸出傳入其中的參數(shù)個數(shù):

function howManyArgs(){alert(arguments.length); } howManyArgs("string",45)//2 howManyArgs();//0 howManyArgs(12)//1

執(zhí)行以上代碼會依次出現(xiàn)3個彈出框,分別顯示2,0和1。由此可見,開發(fā)人員可以利用這一點讓函數(shù)能夠接收任意個參數(shù)并分別實現(xiàn)適當(dāng)?shù)墓δ堋U埧聪旅胬?#xff1a;


?

function doAdd(){if(arguments.length==1){alert(arguments[0]+10); }else if(arguments.length==2){alert(arguments[0]+arguments[1]);} } doAdd(12);//22 doAdd(30,25);//55

關(guān)于arguments的行為,還有一點比較有意思。那就是它的值永遠(yuǎn)與對應(yīng)命名參數(shù)的值保持同步。例如:

function doAdd(num1,num2){arguments[1]=10;alert(arguments[0]+num2); }

  每次執(zhí)行這個doAdd()函數(shù)都會重寫第二個參數(shù),將第二個參數(shù)的值修改為10。因為arguments對象中的值會自動反映到對應(yīng)的命名函數(shù),所以修改arguments[1],也就修改了num2,結(jié)果他們的值都會變成10。不過,這并不是說讀取這兩個值會訪問相同的內(nèi)存空間;它們的內(nèi)存空間是獨立的,另外還要記住,如果只傳人了一個參數(shù),那么為arguments[1]設(shè)置的值不會反應(yīng)到命名參數(shù)中。這是因為arguments對象的長度是由傳人的參數(shù)決定的,不是由定義函數(shù)時的命名參數(shù)決定的。

  關(guān)于參數(shù)還要記住最后一點:如果沒有傳遞值的命名參數(shù)將自動被賦予undefined值。這就跟定義了變量但又沒有初始化一樣。例如,如果只給doAdd()函數(shù)傳遞了一個參數(shù),則num2中就會保存undefined只值。

  嚴(yán)格模式對如果使用arguments對象做出了一些限制。首先,像2前面例子中那樣的賦值會變得無效。也就是說,即使arguments[1]設(shè)置為10,num2的值仍然還是undefined。其次,從寫arguments的值會導(dǎo)致語法錯誤(代碼將不會執(zhí)行)。

轉(zhuǎn)載于:https://www.cnblogs.com/onedaythreeeat/p/4543624.html

總結(jié)

以上是生活随笔為你收集整理的函数 - 理解参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。