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并沒有互換 因為用新引用覆寫在外部不可見 這個很自然 因為函數隻是拿到了引用 并沒有權力更改引用