函數(shù)的定義
第一種:
function abs(x){
if (x >= 0) {
return x;
} else {
return -x;
}
}
由于JavaScript的函數(shù)也是一個對象哭当,上述定義的abs()函數(shù)實(shí)際上是一個函數(shù)對象猪腕,而函數(shù)名abs可以視為指向該函數(shù)的變量。所以有了第二種定義方式钦勘。
第二種:
var abs=function(x){
if (x >= 0) {
return x;
} else {
return -x;
}
}; //按照完整語法需要在函數(shù)體末尾加一個;陋葡,表示賦值語句結(jié)束。
這種方式下彻采,該函數(shù)是一個匿名函數(shù)腐缤,但是賦值給了變量abs,因此可以通過變量abs來調(diào)用該函數(shù)肛响。
函數(shù)的調(diào)用
調(diào)用時岭粤,按順序傳入?yún)?shù)即可。
由于JavaScript允許傳入任意個參數(shù)而不影響調(diào)用特笋,因此傳入的參數(shù)比定義的參數(shù)多也沒有問題剃浇,雖然函數(shù)內(nèi)部并不需要這些參數(shù):
傳入的參數(shù)少哪?
abs()//此時abs(x)函數(shù)的參數(shù)x將收到undefined,計算結(jié)果為NaN虎囚。
要避免收到undefined
臼寄,可以對參數(shù)進(jìn)行檢查:
function abs(x) {
if (typeof x !== 'number') {
throw 'Not a number';
}
if (x >= 0) {
return x;
} else {
return -x;
}
}
arguments
關(guān)鍵字arguments
的作用域是 函數(shù)內(nèi)部,永遠(yuǎn)指向傳入函數(shù)的參數(shù)溜宽。arguments
類似于Array
但不是Array
吉拳。
使用方法:
function abs(){
if(arguments.length == 0){
return 0;
}
var temp = arguments[0];
return temp >= 0 ? temp:-temp;
}
abs();//返回0;
abs(9);//返回9适揉;
abs(-9);//返回9留攒;
應(yīng)用場景:常用于判斷傳入?yún)?shù)的個數(shù)。
//foo(a, [b], c)
//接受2-3個參數(shù)嫉嘀,其中第二個參數(shù) b 是可選參數(shù)炼邀;
function foo(a, b, c){
if(arguments.length === 2){
//實(shí)際拿到的參數(shù)是a和b,c是undefined剪侮;
c = b;//將b的值賦給c拭宁;
b = null;//把b變成默認(rèn)值;
}
...//函數(shù)的具體實(shí)現(xiàn)瓣俯;
}
//要想把中間的可選參數(shù)b變成默認(rèn)值杰标,只能通過`arguments`進(jìn)行轉(zhuǎn)換;
rest
rest
參數(shù)有ES6
標(biāo)準(zhǔn)引入彩匕。作用是獲取除了已定義的參數(shù)之外的所有參數(shù)腔剂。
使用方法:
function foo(a, b, ...rest){
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
//a = 1, b = 2, c = Array[3, 4, 5];
foo(1);
//a = 1, b = undefined, Array[];
rest
要寫在所有參數(shù)的最后,前面加上三個點(diǎn)...
驼仪,前兩個參數(shù)綁定到a,b上掸犬,其余所有的參數(shù)以數(shù)組的形式,傳給變量rest
绪爸。