JavaScript中的函數與arguments

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是個什麼app

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。函數

相關文章
相關標籤/搜索