标签:
问题由来:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 9 </body> 10 <script type="text/javascript"> 11 var a = [1,2]; 12 13 function test1 (aa) { 14 var b = 3; 15 aa.push(b); 16 console.log(‘aa:‘ + aa); //[1,2,3] 17 } 18 19 test1(a); 20 21 console.log(a); //[1,2,3] 22 23 /************************************/ 24 var c = 1; 25 26 function test2 (cc) { 27 var d = 3; 28 cc = cc + d; 29 console.log(‘cc:‘ + cc); // 4 30 } 31 32 test2(c); 33 34 console.log(c); // 1 35 36 </script> 37 </html>
可以看到当传入参数为数组的时候,调用函数,参数值改变;但当传入数字时,参数值不变。
问题原因如下:
Js函数的传值和传址参数
传值:只是将变量的值传入函数,函数会另外配置内存保存参数值,所以并不会改变原变量的值。
传址:将变量实际保存的内存位置传入函数,所以如果在函数中变更参数的值,也会同时变动原参数的值。
数字、字符串和布尔----传值
对象、数组和函数----传址
字符串对象-------传址
原文地址:http://www.cnblogs.com/Mblog/archive/2009/12/24/1631215.html
解决方法:函数最后使用 return
标签:
原文地址:http://www.cnblogs.com/likaopu/p/5690570.html