V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lococo
V2EX  ›  程序员

js 里如何写一个 exchange_value 函数

  •  
  •   lococo · 2014-05-01 19:10:03 +08:00 · 3774 次点击
    这是一个创建于 3865 天前的主题,其中的信息可能已经有所发展或是发生改变。
    var a = 1;
    var b = 2;

    现在我想写一个function,作用就是调换a 和b的值。
    js变量无法传引用,我该怎么写这个函数呀
    11 条回复    2014-05-01 22:45:45 +08:00
    akfish
        1
    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
        2
    ch3x  
       2014-05-01 19:32:45 +08:00
    ES6 可以像 Python 一样做交换。
    `[x, y] = [y, x];`
    x6doooo
        3
    x6doooo  
       2014-05-01 20:23:12 +08:00   ❤️ 1
    a = [b, b = a][0]
    jsonline
        4
    jsonline  
       2014-05-01 20:29:07 +08:00 via Android
    加一个中间量会死么
    jsonline
        5
    jsonline  
       2014-05-01 20:30:18 +08:00 via Android
    还有啊,为什么要交互两个变量的值,怎么会有这种场景
    jsonline
        6
    jsonline  
       2014-05-01 20:31:59 +08:00 via Android
    JS也无法返回多个值。。。
    看来JS需要改进的地方真不少
    Ever
        7
    Ever  
       2014-05-01 20:47:50 +08:00
    用eval就可以, 不过一是难看, 二是涉及scope层次多易起副作用, 得不偿失.
    ljcarsenal
        8
    ljcarsenal  
       2014-05-01 21:48:06 +08:00
    不用var 声明,定义成全局变量。
    tangzx
        9
    tangzx  
       2014-05-01 22:02:21 +08:00 via iPhone
    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
        10
    tangzx  
       2014-05-01 22:04:08 +08:00 via iPhone
    @tangzx Node style 哈哈😄
    Mutoo
        11
    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]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:34 · PVG 10:34 · LAX 18:34 · JFK 21:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.