关于javascript的装箱和拆箱及值与引用

Bind 2011-09-16 05:48:50
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实现两个数的交换, 可是以上代码并不能实现,
...全文
74 点赞 收藏 7
写回复
7 条回复
一個程序員 2011年09月17日
无论是值传递还是引用传递,直接对形参“赋值”操作,肯定不会更改实参内容。

要更改通过形参更改实参,需要以引用传递,并且通过引用句柄,更改内部值。

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]
回复 点赞
咸鱼boris 2011年09月17日
如果你想改变全局变量的值,可以这么改

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));
回复 点赞
愚者只看星不看答案 2011年09月17日


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);

回复 点赞
KK3K2005 2011年09月17日
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]);
回复 点赞
printf_2012 2011年09月17日
[Quote=引用 4 楼 sharkdbj 的回复:]

如果你想改变全局变量的值,可以这么改
JScript code

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+"|……
[/Quote]

+1
回复 点赞
Bind 2011年09月16日
新问题
var x = new Number(1);
var y = new Number(2);

要求实现一个函数, 传进x, y, 实现交换两者的值, 函数中不许用全局变量x,y

可有办法实现?
回复 点赞
Bind 2011年09月16日
shit 想差了
回复 点赞
发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告