function swap(x,y)
{
var t = x;
x = y;
y = t;
};var x = new Number(11); //x此时是一个引用
var y =new Number(22);alert(x + "|" + y);swap(x,y);  //传进两个引用以交换两个数alert(x+"|"+y);我的目的是swap实现两个数的交换, 可是以上代码并不能实现, 

解决方案 »

  1.   

    新问题
    var x = new Number(1);
    var y = new Number(2);要求实现一个函数, 传进x, y, 实现交换两者的值, 函数中不许用全局变量x,y可有办法实现?
      

  2.   

    无论是值传递还是引用传递,直接对形参“赋值”操作,肯定不会更改实参内容。要更改通过形参更改实参,需要以引用传递,并且通过引用句柄,更改内部值。var xy = [1, 2];// 按引用传递
    function swap(xy){
      // 再实现交换
      xy[0] = xy[0] + xy[1];
      xy[1] = xy[0] - xy[1];
      xy[0] = xy[0] - xy[1];
    }alert(xy); // [1, 2]
    swap(xy);
    alert(xy); // [2, 1]
      

  3.   

    如果你想改变全局变量的值,可以这么改function swap()
    {
    var t = x;
    x = y;
    y = t;
    };var x = new Number(11); //x此时是一个引用
    var y =new Number(22);alert(x + "|" + y);swap(x,y); //传进两个引用以交换两个数alert(x+"|"+y);直接在函数体内调用全局变量,
    如果形参传递的话,会改变参数的作用域,也就是说形参传入的值只在函数内部有效,
    除非你输出结果,比如这样:function swap(x,y)
    {
    var t = x;
    x = y;
    y = t;
    return x + "|" + y;  //输出结果
    };var x = new Number(11); //x此时是一个引用
    var y =new Number(22);alert(x + "|" + y);//swap(x,y); //传进两个引用以交换两个数alert(swap(x,y));
      

  4.   

    function swap(xy)
    {
    var t = xy.x;
    xy.x = xy.y;
    xy.y = t;
    };var xy1={   x:1
       ,y:2
    }
    alert([xy1.x, xy1.y]);
    swap(xy1);
    alert([xy1.x, xy1.y]);
      

  5.   

      var x = new Number(1);
            var y = new Number(2);        function swap(x,y) {
                var arr = [y, x];
                x = arr[0];
                y = arr[1];
                alert(x + ":" + y);
            };        swap(x, y);