js中怎么定義一個函數?
// 定義一個函數,求出參數中的最小值
function min(a,b,c,d...) {
//函數的代碼
}
上面的函數怎么調用?
min(1,2,3,4,5,6,7...);
定義一個求兩個數中最小值的函數
function min(a, b) {
return a>b? b:a;
}
調用
min(1,2);
- 1 函數的
形參
是什么?
函數的形參是定義該函數時,你設置的函數參數個數 - 2 min函數的
形參
有幾個?
2個,a和b - 3 min函數的
實參
有幾個?
調用函數時傳遞幾個就是有幾個,上面調用時,我們傳遞了 1和2 ,那么實參
個數就是兩個
問?既然實參
傳遞幾個就是有幾個,調用函數時,我傳遞的實參個數能不能大于形參個數?
function min(a, b) {
return a>b? b:a;
}
var result=min(1,2,-1,4)
console.log(result) //輸出 1
以上代碼說明,我們可以傳遞的參數大于形參個數,且不會出錯。
- 為什么結果是1,而不是-1?
對于函數來說,實參和形參是一一對應的,即a=1,b=2,我們的代碼只要求a,b參數運算,那么結果自然是1。
問題來了,我們傳遞了4個參數,a,b用了,那么-1,4 這兩個參數去哪了,我能不能拿到?
答案是,我們的另外兩個參數被放在了函數的arguments
中,我們來看看arguments
是個什么
function min(a,b) {
console.log(arguments);
return a>b? b:a;
}
var result=min(2,6,90,10)
console.log(result) //輸出 2
image.png
- 原來我多傳的參數在
arguments
中。
實參有多少個,只要調用arguments.length
即可,當前有4個 - 函數的形參個數能不能知道?
當然可以 , 形參個數就是min.length
-
arguments
看著像是個數組,不過,它可并不是一個數組哦,它是個object類型的,
image.png - 怎么取到所有的參數,就不言而喻了
for(var i in arguments){
console.log(arguments[i])
}
- 說了這么半天,這玩意兒有啥用處?
//兩個數字中的最小值
function min(a,b){
return Math.min(a,b);
}
min(1,2);
//四個數字中的最小值
function min(a, b, c, d){
return Math.min(a,b,c,d);
}
min(1, 2,3,4);
//6個數字中的最小值
function min(a, b, c, d,e,f){
return Math.min(a, b, c, d,e, f);
}
min(1, 2,3,4,5,6);
//n個數字中的最小值
function min(a, b, c, d,e,f,...n){
return Math.min(a, b, c, d,e, f,...n);
}
min(1, 2,3,4,5,6,...n);
//隨著我們要比較的數字的增多,我的函數形參數目也越來越多,
//有了arguments這個對象,形參數目不就可以不寫了么,像這樣
function min(){
var res=arguments[0]
for(var i in arguments){
if(i==0) continue;
res=res>arguments[i]?arguments[i]:res;
}
return res;
}
min(1, 2,3,4);
//代碼更精簡點,還可以這樣
function min(){
return Math.min.apply(this,arguments);
}
min(1, 2,3,4,-1,2,0-3);//-3
那么我們可以少傳么?
function min(a, b) {
return a>b? b:a;
}
var result=min(1)
console.log(result) //輸出 1
以上代碼說明,我們可以傳遞的參數小于形參個數,且不會出錯。
為什么不會出錯?因為當我們不給min函數傳遞 b 這個參數的時候,b這個參數為 undefined
,這時候,a>undefined 為false,因為b轉換為數值類型之后是 NaN。