1、赋值 [html] view plain copy print ? var a = 1; var b = a; //赋的是a的复制值 b ++; alert(a); //"1" b的修改不影响a 2、引用 [html] view plain copy print ? var a = [1]; var b = a; //赋的是a的引用 b[0] ++; alert(a); //"2" b的修改对a也有效 不过当然b = [2];这种修改对a是没用的。。。。。。 起到引用作用又不影响原数组的方法 方法一:用jq的$.extend方法 [html] view plain copy print ? <script type="text/javascript"> var a=[1]; var b; b= $.extend(true,{},a) b[0]++; alert(b[0]); </script> 方法二:用数组的concat方法 [html] view plain copy print ? <script type="text/javascript"> var a=[1]; var b=a.concat(); b[0]++; alert(a[0]); </script> 方法三:用函数传参的方法 [html] view plain copy print ? 传值的传递:传给函数的是数值的一个复制,函数中对其的修改外部不可见 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并没有互换 因为用新引用覆盖在外部不可见 这个很自然 因为函数只是拿到了引用 并没有权力更改引用 以上文章转自http://blog.csdn.net/kongjiea/article/details/23360937 个人总结:js中array 的类似 array2=array1;array2[i],array2.splice 操作的是地址,所以会改变原来的数据