var a = 1;
var b = 2;
现在我想写一个function,作用就是调换a 和b的值。
js变量无法传引用,我该怎么写这个函数呀
var b = 2;
现在我想写一个function,作用就是调换a 和b的值。
js变量无法传引用,我该怎么写这个函数呀
|
akfishMay 1, 2014
1
一句话,不能。
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); |
|
ch3xMay 1, 2014
2
ES6 可以像 Python 一样做交换。
`[x, y] = [y, x];` |
|
3
a = [b, b = a][0]
|
|
jsonlineMay 1, 2014 via Android
4
加一个中间量会死么
|
|
jsonlineMay 1, 2014 via Android
5
还有啊,为什么要交互两个变量的值,怎么会有这种场景
|
|
jsonlineMay 1, 2014 via Android
6
JS也无法返回多个值。。。
看来JS需要改进的地方真不少 |
|
EverMay 1, 2014
7
用eval就可以, 不过一是难看, 二是涉及scope层次多易起副作用, 得不偿失.
|
|
ljcarsenalMay 1, 2014
8
不用var 声明,定义成全局变量。
|
|
tangzxMay 1, 2014 via iPhone
9
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);});
|
|
MutooMay 1, 2014
11
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] |