对函数的参数求和

原始代码:

 1 var i = iResult = 0;
 2 function sum(a,b){
 3 
 4     for (var i = 0; i < arguments.length; i++){
 5         iResult += arguments[i];
 6     }
 7     return iResult;
 8 }
 9 //应用
10 console.log(sum(1,2,3,4,5,6,7,8,9,10));//55
11 console.log(sum(1)); //56
12 console.log(sum(1)); //57
13 console.log(sum(1)); //58

  奇怪,为什么sum会叠加呢?iResult 没有初始化,应该是每次函数调用的时候都要初始化一下,change-->

 1 function sum(a,b){
 2     var i = iResult = 0;
 3     for (var i = 0; i < arguments.length; i++){
 4         iResult += arguments[i];
 5     }
 6     return iResult;
 7 }
 8 //应用
 9 console.log(sum(1,2,3,4,5,6,7,8,9,10));//55
10 console.log(sum(1));//1
11 console.log(sum(1));//1
12 console.log(sum(1));//1

  现在正常了。那么再做出一些变化吧,change-->

 1 function sum(a,b){
 2     var i = iResult = 0;
 3     a = 0, b = 2;
 4     for (var i = 0; i < arguments.length; i++){
 5         iResult += arguments[i];
 6     }
 7     return iResult;
 8 }
 9 //应用
10 console.log(sum(1,2,3,4,5,6,7,8,9,10));//54
11 console.log(sum(1));//0
12 console.log(sum(1));//0
13 console.log(sum(1,2));//2

  上面代码中的a, b 是局部变量。arguments是实参(函数执行时候-实际传递的参数),不是形参哦,看下面code-->

1     function add(x, y){
2         arguments[1] = 2; 
3         console.log("y::",y,", arguments:",arguments);
4     }
5     add(1,3);   // y:: 2 , arguments: [1, 2]            // arguments 
6     add(1);     // y:: undefined , arguments: [1, 2]    // y 是 undefined 因为没有传参给 y

   继续change:

1 function add(x, y){
2         y = 2; 
3         console.log("y::",y,", arguments:",arguments);
4     }
5     add(1,3);   // y:: 2 , arguments: [1, 2]            // arguments 
6     add(1);     // y:: 2 , arguments: [1]     

 

posted @ 2013-10-23 11:56  楚玉  阅读(407)  评论(0编辑  收藏  举报