关于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实现两个数的交换, 可是以上代码并不能实现,
...全文
110 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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));
  • 打赏
  • 举报
回复


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 想差了

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧