黑马程序员技术交流社区

标题: JavaScript参数传递与Java的区别? [打印本页]

作者: 任文杰    时间: 2012-7-25 18:58
标题: JavaScript参数传递与Java的区别?
今天,看了毕向东老师的JavaScript视频,有个疑问想请教下大家,下面是代码:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title>Insert title here</title>
  6. </head>
  7. <body>
  8. <script type="text/javascript">
  9.         var x = [1,2,3];
  10.         function show(x) {
  11.                 x = [4,5,6];
  12.         }
  13.     show(x);
  14.     document.write("x=="+x);//x==1,2,3
  15.        
  16. </script>
  17. </body>
  18. </html>
复制代码
在JavaScript中,数组是对象,为什么将引用传递给参数,没有把实体的值改变,还是输出1,2,3而不是4,5,6
作者: 刘玉    时间: 2012-7-25 20:44
本帖最后由 刘玉 于 2012-7-25 21:00 编辑

js中数组、对象等按值(变量地址的值)传递,当你的x进入函数后,它的地址跟外边的地址是一样的,但是当你重新赋值时,它的地址就跟外面的断了。解决这个问题有两个方法:
1.show()不要传x进去
  function show() {
              x = [4,5,6];
   }
2.传x进去但别重新赋值,直接操作它
  function show(x) {
    x[0]=4;
    x[1]=5;
    x[2]=6;
  }

作者: 罗宵    时间: 2012-7-25 20:44
function show(x) {

11.                x = [4,5,6];

12.        }
你定义了一个方法,赋值x=[4,5,6];
但是并没有返回值。虽然调用了show()方法,在只是在show()方法里面有效,所以改成
function show(x) {
                x = [4,5,6];
return x;
        }
        var x = [1,2,3];     
var b=show(x);  
    document.write("b=="+b);//x==4,5,6
要么你就在show()方法里面写出来
function show(x) {
                x = [4,5,6];
document.write("x=="+x);
        }
        var x = [1,2,3];
show(x);
作者: 罗宵    时间: 2012-7-25 20:45
function show(x) {

11.                x = [4,5,6];

12.        }
你定义了一个方法,赋值x=[4,5,6];
但是并没有返回值。虽然调用了show()方法,在只是在show()方法里面有效,所以改成
function show(x) {
                x = [4,5,6];
return x;
        }
        var x = [1,2,3];     
var b=show(x);  
    document.write("b=="+b);//x==4,5,6
要么你就在show()方法里面写出来
function show(x) {
                x = [4,5,6];
document.write("x=="+x);
        }
        var x = [1,2,3];
show(x);
作者: 吴立杰    时间: 2012-7-25 21:20
  1. <!-- saved from url=(0013)about:internet -->
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <title>Insert title here</title>
  7. </head>
  8. <body>
  9. <script type="text/javascript">
  10.         var x = [1,2,3];
  11.         function show(x) {
  12.                 x = [4,5,6];
  13.                                 //需要返回值!按照楼主那么写,写入的就是x原本的值,函数内的值时变的
  14.                                 //你可以alert(x);输出一下就知道了
  15.                                 return x;
  16.         }
  17.    document.write("x=="+show(x));//x==1,2,3
  18.         
  19. </script>
  20. </body>
  21. </html>
复制代码
小结:楼主,对于js这种火星java,你不必练习到像java那么熟练,只需要知道它里面几个常用的方法,知道它具体的格式,你会看就行。js中的对象完全是用函数模拟出来的,所以它叫基于对象,很雷人的火星java。一点小建议,咱们共同努力!加油,楼主!
作者: 吴立杰    时间: 2012-7-25 21:23
刘玉 发表于 2012-7-25 20:44
js中数组、对象等按值(变量地址的值)传递,当你的x进入函数后,它的地址跟外边的地址是一样的,但是当你重新 ...

用这么复杂吗?楼主很明显是输出的时候写错了
作者: 刘玉    时间: 2012-7-25 21:29
本帖最后由 刘玉 于 2012-7-25 21:33 编辑
吴立杰 发表于 2012-7-25 21:23
用这么复杂吗?楼主很明显是输出的时候写错了

测试一下就知道了:P,重点是“JavaScript参数传递与Java的区别
作者: 吴立杰    时间: 2012-7-25 21:57
刘玉 发表于 2012-7-25 21:29
测试一下就知道了,重点是“JavaScript参数传递与Java的区别”

有什么区别?javascript都是模拟出来的对象,跟java一样的,就是传递在传递对象的时候如果你的形参写的是Object 你传递进去的实参就变成了Object了也就多态那点玩意。javascript里没有多态的概念,连个类继承都是模拟出来的,用一个叫获取原型的方法,不用想那么复杂。
作者: 刘玉    时间: 2012-7-25 23:15
吴立杰 发表于 2012-7-25 21:57
有什么区别?javascript都是模拟出来的对象,跟java一样的,就是传递在传递对象的时候如果你的形参写的是 ...

调试一下楼主的代码看看方法里外的x的值是否一样不就清楚了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2