1、赋值
[html] view plain copy
- var a = 1;
- var b = a; //赋的是a的复制值
- b ++;
- alert(a); //"1" b的修改不影响a
2、引用
[html] view plain copy
- var a = [1];
- var b = a; //赋的是a的引用
- b[0] ++;
- alert(a); //"2" b的修改对a也有效 不过当然b = [2];这种修改对a是没用的。。。。。。
起到引用作用又不影响原数组的方法
方法一:用jq的$.extend方法
[html] view plain copy
- <script type="text/javascript">
- var a=[1];
- var b;
- b= $.extend(true,{},a)
- b[0]++;
- alert(b[0]);
- </script>
方法二:用数组的concat方法
[html] view plain copy
- <script type="text/javascript">
- var a=[1];
- var b=a.concat();
- b[0]++;
- alert(a[0]);
- </script>
方法三:用函数传参的方法
[html] view plain copy
- 传值的传递:传给函数的是数值的一个复制,函数中对其的修改外部不可见
- var a = 1;
- var b = 2;
- function change(a,b) {
- var c = a;
- a = b; //用新引用覆盖
- b = c;
- alert(a); //"2"
- alert(b); //"1"
- }
- change(a,b);
- alert(a); //"1"
- alert(b); //"2"
- 传址的传递:传给函数的是数值的一个引用,函数中对其属性的修改外部可见,但用新引用覆盖其则在外部不可见,比如
- var a = [1, 2, 3];
- var b = [5, 6];
- function change(a,b) {
- a[0] = 4; //对其属性的修改外部可见
- var c = a;
- a = b; //用新引用覆盖
- b = c;
- alert(a); //"5,6"
- alert(b); //"4,2,3"
- }
- change(a,b);
- alert(a); //"4,2,3"
- alert(b); //"5,6"
- 从结果可以看出a和b并没有互换 因为用新引用覆盖在外部不可见 这个很自然 因为函数只是拿到了引用 并没有权力更改引用