一個(gè)函數(shù)可以具有一個(gè)或多個(gè)參數(shù),這些參數(shù)將由調(diào)用代碼提供并可以在函數(shù)內(nèi)部使用。
JavaScript是一種動(dòng)態(tài)類(lèi)型腳本語(yǔ)言,因此函數(shù)參數(shù)可以具有任何數(shù)據(jù)類(lèi)型的值。
函數(shù)參數(shù)是函數(shù)定義中列出的名稱(chēng)。
函數(shù)實(shí)參是傳遞給函數(shù)(并由函數(shù)接收)的實(shí)際值。
在定義函數(shù)以在運(yùn)行時(shí)接受輸入值時(shí),可以指定參數(shù)。
函數(shù)參數(shù)在函數(shù)定義的括號(hào)()中列出。
// 定義函數(shù) function greet(name) { document.write("Hello, " + name); } // 以“Seagull”作為參數(shù)調(diào)用greet函數(shù) greet("Seagull");測(cè)試看看?/?
您可以根據(jù)需要定義任意數(shù)量的參數(shù)。
// 定義函數(shù) function add(num1, num2, num3) { var total = num1 + num2 + num3; document.write(total); } // 調(diào)用函數(shù) add(5, 20, 10); // 輸出: 35 add(-5, 8, 7); // 輸出: 10測(cè)試看看?/?
但是,對(duì)于您指定的每個(gè)參數(shù),在調(diào)用函數(shù)時(shí)都需要將相應(yīng)的參數(shù)傳遞給該函數(shù),否則其值將變得不確定。
//定義函數(shù) function showFullname(fName, lName) { document.write(fName + " " + lName); } // 調(diào)用函數(shù) showFullname("Kavy", "Mark"); // 輸出: Kavy Mark showFullname("John"); // 輸出: John undefined測(cè)試看看?/?
如果未傳遞值或未定義,則默認(rèn)函數(shù)參數(shù)允許使用默認(rèn)值初始化命名參數(shù)。
這意味著,如果在調(diào)用函數(shù)時(shí)未提供任何參數(shù)來(lái)使用這些函數(shù),則將使用這些默認(rèn)參數(shù)值。
function myFunc(a, b = 20) { // 如果未傳遞或未定義參數(shù)b,則b為20 return a + b; } myFunc(10, 5); // 返回 15 myFunc(10);// 返回 30測(cè)試看看?/?
JavaScript中的所有函數(shù)默認(rèn)都可以使用arguments 對(duì)象。參數(shù)對(duì)象包括每個(gè)參數(shù)的值。
arguments對(duì)象是一個(gè)類(lèi)似于object的數(shù)組。您可以使用類(lèi)似于數(shù)組的索引來(lái)訪問(wèn)其值。
下面的示例從傳遞的參數(shù)中返回最大數(shù)目:
getMax(9, 15, 61, 3); function getMax() { let max = 0; for(let i = 0; i < arguments.length; i++) { if (arguments[i] > max) { max = arguments[i]; } } return max; }測(cè)試看看?/?
以下示例返回所有傳遞的參數(shù)的總和:
getSum(9, 15, 61, 3); function getSum() { let sum = 0; for(let i in arguments) { sum += arguments[i]; } return sum; }測(cè)試看看?/?
即使函數(shù)不包含任何參數(shù),arguments對(duì)象也是有效的。
arguments對(duì)象是類(lèi)似于對(duì)象的數(shù)組,但是,它不支持?jǐn)?shù)組方法。
reset參數(shù)語(yǔ)法允許我們的參數(shù)數(shù)目不定傳遞給一個(gè)函數(shù)為一個(gè)數(shù)組。
當(dāng)您想將參數(shù)傳遞給函數(shù)但不知道需要多少個(gè)參數(shù)時(shí),這特別有用。
通過(guò)在命名參數(shù)前面加上rest運(yùn)算符(...)(即三個(gè)點(diǎn))來(lái)指定rest參數(shù)。
function sum(...arr) { return arr.reduce((previous, current) => { return previous + current; }); } sum(1, 2); // 返回 3 sum(1, 2, 3, 4);// 返回 10 sum(1, 2, 3, 4, 5, 6); // 返回 21測(cè)試看看?/?
在函數(shù)調(diào)用中,參數(shù)是函數(shù)的參數(shù)。
JavaScript參數(shù)由值傳遞:該函數(shù)僅知道值,而不是參數(shù)的位置。
如果函數(shù)更改了參數(shù)的值,則不會(huì)更改參數(shù)的原始值。
對(duì)參數(shù)的更改在函數(shù)外部不可見(jiàn)(反映)。
在JavaScript中,對(duì)象引用是值。
因此,對(duì)象的行為就像通過(guò)引用傳遞一樣:
如果函數(shù)更改了對(duì)象屬性,它將更改原始值。
對(duì)對(duì)象屬性的更改在函數(shù)外部可見(jiàn)(反映)。