js 里如何写一个 exchange_value 函数

2014-05-01 19:10:03 +08:00
 lococo
var a = 1;
var b = 2;

现在我想写一个function,作用就是调换a 和b的值。
js变量无法传引用,我该怎么写这个函数呀
3791 次点击
所在节点    程序员
11 条回复
akfish
2014-05-01 19:17:58 +08:00
一句话,不能。
js没有pass by reference,只有pass by value。
你可以pass一个object,然后function修改object的内容,但实际上你依然是pass了这个object的引用的value而已。

var obj = {a: 1, b: 2};

function swap(obj) {
var tmp = obj.a;
obj.a = obj.b;
obj.b = tmp;
return obj;
}

swap(obj);
ch3x
2014-05-01 19:32:45 +08:00
ES6 可以像 Python 一样做交换。
`[x, y] = [y, x];`
x6doooo
2014-05-01 20:23:12 +08:00
a = [b, b = a][0]
jsonline
2014-05-01 20:29:07 +08:00
加一个中间量会死么
jsonline
2014-05-01 20:30:18 +08:00
还有啊,为什么要交互两个变量的值,怎么会有这种场景
jsonline
2014-05-01 20:31:59 +08:00
JS也无法返回多个值。。。
看来JS需要改进的地方真不少
Ever
2014-05-01 20:47:50 +08:00
用eval就可以, 不过一是难看, 二是涉及scope层次多易起副作用, 得不偿失.
ljcarsenal
2014-05-01 21:48:06 +08:00
不用var 声明,定义成全局变量。
tangzx
2014-05-01 22:02:21 +08:00
var a=1;var b=2;var swap=function(v1, v2, cb){_.defer(function(){cb(v2, v1);});};swap(a, b, function(a, b){console.log("swapped: " + a + ", " + b);});
tangzx
2014-05-01 22:04:08 +08:00
@tangzx Node style 哈哈😄
Mutoo
2014-05-01 22:45:45 +08:00
function swap(a, b){
var tmp = this[a];
this[a] = this[b];
this[b] = tmp;
}

n = 1;
m = 2;
swap.call(this,"n","m");
console.log([n,m]); // [2, 1]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/110787

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX