function a(x,y){
x=[y,y=x][0]
alert(x+"\r\n"+y)//44 33
}
var b=[33],c=[44]
a(b,c)
alert(b+"\r\n"+c)//33 44

解决方案 »

  1.   

    下面这样也一样
    function a(x,y){
    x=[y,y=x][0]
    alert(x+"\r\n"+y)//44 33
    }
    a.b=[33],a.c=[44]
    a(a.b,a.c)
    alert(a.b+"\r\n"+a.c)//33 44function a(x,y){
    x=[y,y=x][0]
    alert(x+"\r\n"+y)//44 33
    }
    a.b=[33],a.c=[44]
    a([a.b],[a.c])
    alert(a.b+"\r\n"+a.c)//33 44
      

  2.   

    用尽办法也不行
    function b(){
     this.a=function(x, y){
    x = [y, y = x][0]
    alert(x + "\r\n" + y)//44 33
    }
    }
    var bb=new b
    bb.a.b=[33],bb.a.c=[44]
    bb.a([bb.a.b],[bb.a.c])
    alert(bb.a.b+"\r\n"+bb.a.c)//33 44
      

  3.   

    好像弄明白了
    var a=['aa']
    var b=a
    b[0]="sss"
    alert(a)//弹出sssvar a=['aa']
    var b=a
    b="sss"//改变了引用
    alert(a)//弹出aa因为永远也不可能下面这样
    function a(x[0],y[0]){//<-------错的
    x=[y,y=x][0]
    alert(x+"\r\n"+y)//44 33
    }
    所以相当于改变了引用
      

  4.   

    简单的说,对象引用作为函数参数时将被复制。
    a(b,c)将复制一个b'和一个c',并将它们传递给a函数,在a函数内操作x,y只会影响b'和c',不会影响b和c
    但是在函数中操作b'和c'指向的值将会产生影响
    这样试试:function a(x,y){
        var tmp = x[0];
        x[0] = y[0];
        y[0] = tmp;
        alert(x+"\r\n"+y);
    }
    var b=[33],c=[44];
    a(b,c);
    alert(b+"\r\n"+c);
      

  5.   

    6楼正解
    把原理带到原来的式子上 就是下面这样了
    function a(x,y){
    x[0]=[y[0],y[0]=x[0]][0]
    alert(x+"\r\n"+y);//弹出44 33
    }
    var b=[33],c=[44];
    a(b,c);
    alert(b+"\r\n"+c);//弹出44 33
      

  6.   

    说是复制好像也不大正确.
    例如我们经常做的.
    把事件控件传进去时用的this
    在方法中改变其属性是真的改变了的.所以这个更加像C中的指针.
      

  7.   

    数组可以用x[0] y[0]来实现上面的变换但是函数 有没有方法也实现调换呢??
    function a(x,y){
    x=[y,y=x][0]
    alert(x+"\r\n"+y);//弹出 function(y){} function(x){}
    }
    var b=function(x){},c=function(y){};
    a(b,c);
    alert(b+"\r\n"+c);//弹出function(x){} function(y){}
      

  8.   

    事件处理也是要调用函数的,形如func(this),this作为实参被复制,这样即使使用形参修改属性,仍然是有效果的
    每个人的理解不一样吧,我们的结果是相同的:)
      

  9.   



    我能理解你复制的意义.
    也没和你的冲突.
    的确是复制了.
    只是复制的是地址指向.
    也就是常说的指针.
    所以在函数中.
    就算对传入的function(obj)中的obj赋值.
    也是改变不了this的.
    因为obj只是指向this.
    而不是实际上的this.
    obj只能是obj.
    但是obj.a则不同.
    他的确就是this.a;
    因为他是指向this的实际地址下的a.
    所以改变obj.a的时候this.a实际也改变了.