實(shí)參個(gè)數(shù)大于形參個(gè)數(shù)
對(duì)于如下函數(shù)
function say(name, msg) {
console.log(name);
console.log(msg);
}
這句話的調(diào)用結(jié)果是什么?
say('1', '2', '3')
對(duì)于其他語(yǔ)言,比如 Java肋杖,要是這么寫的話,編譯器根本就不會(huì)讓你編譯通過(guò)挖函,但是在 JS 里是可以運(yùn)行的状植。運(yùn)行結(jié)果是
1
2
undefined
實(shí)參個(gè)數(shù)小于形參個(gè)數(shù)
還是同樣的代碼
function say(name, msg) {
console.log(name + msg);
}
say('1')
打印
1
undefined
如果什么參數(shù)都不寫,直接調(diào)用
say();
打印
undefined
undefined
結(jié)論
從上面的例子可以看出怨喘,在 JS 中變量定義的時(shí)候津畸,如果不給一個(gè)變量賦初值那么該變量的類型為
undefiend
在進(jìn)行函數(shù)調(diào)用的時(shí)候,不管實(shí)參的數(shù)目大于形參還是小于形參被調(diào)用的函數(shù)都會(huì)執(zhí)行必怜;在JS中函數(shù)不介意傳遞進(jìn)來(lái)多少個(gè)參數(shù)肉拓,也不在乎傳進(jìn)來(lái)的參數(shù)是什么數(shù)據(jù)類型。發(fā)生函數(shù)調(diào)用的時(shí)候可以給一個(gè)實(shí)參也可以給多個(gè)實(shí)參梳庆。
原理
在 js 中暖途,參數(shù)在內(nèi)部是用一個(gè)數(shù)組來(lái)表示。函數(shù)接收到的始終是這個(gè)數(shù)組膏执,而不關(guān)心數(shù)組中包含哪些參數(shù)驻售,如果這個(gè)數(shù)組不包含任何參數(shù)也無(wú)所謂,包含多個(gè)參數(shù)也沒(méi)問(wèn)題更米。
在函數(shù)體內(nèi)可以通過(guò) arguments
對(duì)象來(lái)訪問(wèn)這個(gè)參數(shù)數(shù)組欺栗,從而獲取傳遞給參數(shù)的每個(gè)參數(shù)。
function say(name, msg) {
for(let i = 0; i < arguments.length; i++) {
console.log('arg[' + i + '] = ' + arguments[i]);
}
console.log('length = ' + arguments.length);
}
傳入 3 個(gè)參數(shù)
say('1', '2', '3');
打印結(jié)果
arg[0] = 1
arg[1] = 2
arg[2] = 3
length = 3