原始代码:
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]