arguments對象的實例使用

新年第一記,從這裏開始,先來個簡單的!去年的知識梳理留下了不少尾巴,緣由有不少(知識儲量不足,懶了,項目多...) lg:都是藉口~   好吧,我認可,這都是藉口,今年必定把尾巴清乾淨!javascript

下面要寫的是知識梳理的第一個案例:html

  1. 寫一個求和的方法sumFn,無論傳遞的參數有什麼,都能將最終的和算出來,而且返回給函數外部使用。(要求:一個參數都不傳默認結果爲0,對於傳遞的非正常數字的參數不與累加操做);

這個案例主要要考察的知識點是 arguments 參數,來給個特寫,什麼意思呢?java

arguments 參數是一個比較特殊的對象,是當前函數的一個內置屬性,它很是想Array,但卻不是Array lg:說的什麼,仍是不懂~  額,好吧,例子賽過一切雄辯,我們舉幾個栗子來看看:
數組

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function abc(a,b,c){
        //看看arguments是什麼
     console.log(arguments);
}
 
abc(1,2,3)  ;  //[1,2,3] 這不是數組嗎
 
 
function abc(a,b,c){
        //看看arguments是什麼類型的
     console.log( typeof arguments)  
}
 
abc(1,2,3)  ;  //object   這是對象,不是數組

 

看看,是否是有點意思,似數組非數組  lg:那它怎麼用呢~  這個問題問的好,看下面代碼:瀏覽器

?
1
2
3
4
5
6
7
8
9
function abc(a,b,c){
     var len = arguments.length;
     console.log(len);
     console.log(arguments[0]);
     console.log(arguments[1]);
}
abc(1,2,3); // 3 , 1 , 2
 
//長度爲3,第一個值爲1,第二個值爲2...  看來是具備對應關係的

lg:就只有這2下子?一點都很差玩~   呵,你還急了,固然不僅這兩下子啊,它有一個很是實用的功能,就是在函數中,無需明確指出參數名,arguments能直接訪問它,你說屌不屌,耳聽爲虛,眼睛爲使:函數

?
1
2
3
4
5
6
7
8
function abc(){
     var a = arguments;
     var num = arguments[0] + arguments[1] + arguments[2]; //這裏能夠用循環,爲方便查看,拆開了寫,你懂的
     console.log(num);
}
abc(1,2,3); // 6  說明能夠獲取
 
//正常來講,函數沒有參數,應該是要報錯的,若是能成功運行,說明它具有這個神級

lg:果真了得啊,那它還有沒有其餘的吊炸天技能呢? 固然有啦!arguments對象中有一個很是有用的屬性:callee。arguments.callee返回此arguments對象所在的當前函數引用。在使用函數遞歸調用時推薦使用arguments.callee代替函數名自己。舉個栗子:post

?
1
2
3
4
5
6
7
8
9
function abc(a){
   if (a==1){
     console.log(arguments.callee); //直接輸出當前函數
     return 1;
  }
   return a + arguments.callee(--a);
}
         
var mm = abc(10);
console.log(mm); // 55<br><br>//arguments.callee(--a) 執行了遞歸調用,這樣就完成了1~9的累加

看到這裏,上面說的例子應該就不難寫了吧,來跟着我左手右手一個慢動做:測試

 

function sumFn(){
   var arg = arguments;
   var sum = 0;
  if(arg == '' || arg == ' ' || arg ==null){
    sum = 0;
  }else{
    for(var i=0;i<arg.length;i++){
      if(isNaN(arg[i]) || arg[i] == '' || arg[i] ==' '){
        sum = sum;
      }else{
        sum +=arg[i];  
      }
    }
  }        
  return sum;
}
 
var  num1 = sumFn(2) + sumFn(3);
console.log(num1);  //5
 
var num2 = sumFn(2,3,4);
console.log(num2);  //9
 
var num3 = sumFn();
console.log(num3);  //0
var num4 = sumFn(1,'e',6); console.log(num4); //7

 

到這裏,不知道你對這個例子理解了沒有,  lg: 這麼好的東西,兼容性怎麼樣呢?  哈哈,這麼吊炸天的東西,兼容性還特別的好,你說氣不氣人,經測試,支持全部瀏覽器!spa

好了,它是對象,它也有對象,可是我尚未對象,嗚嗚嗚~~~,我要去找對象去了!code

行文倉促!有理解的不正確的或者是遺漏的東西,萬望批評指正!不勝感激!

出處:http://www.cnblogs.com/liugang-vip/p/5201146.html

相關文章
相關標籤/搜索