V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nowheretoseek
V2EX  ›  问与答

javascript 这么写有什么意义?

  •  
  •   nowheretoseek · 2021-06-27 14:48:00 +08:00 · 1681 次点击
    这是一个创建于 1246 天前的主题,其中的信息可能已经有所发展或是发生改变。

    断点分析某问答网站的 js 源码,发现某个函数如下

            var r = function(r) {
                var o = new G;
                return o.k = n,
                o.k[2] = r,
                o.v(e.G, t.h),
                o.r[6]
            };
    

    是 prettify 之后的 code 了,不过原函数应该也是 return 多个值。我理解 return 是不能操作多个值的啊,console 里面试了一下也报错,这里为什么会有这种写法呢?

    11 条回复    2021-06-27 22:48:17 +08:00
    mxT52CRuqR6o5
        1
    mxT52CRuqR6o5  
       2021-06-27 14:49:43 +08:00 via Android
    不是什么 return 多个值,就是单纯的逗号表达式,很多语言都有的,而且也不会报错
    nowheretoseek
        2
    nowheretoseek  
    OP
       2021-06-27 14:52:37 +08:00
    @mxT52CRuqR6o5 也就是 return 的只是最后一个,后面的值吧?可是这么写有什么意义呢?
    Cbdy
        3
    Cbdy  
       2021-06-27 14:52:49 +08:00 via Android
    C 语言祖传的逗号表达式
    yuzo555
        4
    yuzo555  
       2021-06-27 14:53:24 +08:00
    return 的是最后一个值。

    return a,b,c
    相当于
    a;b;return c
    mxT52CRuqR6o5
        5
    mxT52CRuqR6o5  
       2021-06-27 14:56:25 +08:00 via Android   ❤️ 3
    @nowheretoseek 没什么意义,就是单纯的代码压缩
    而且现在为了追求压缩极限,不仅考虑压缩后的文件大小,还会考虑 zip(等 http body 压缩协议)压缩后的大小,使用逗号分割比使用分号分割能提供更好的文本冗余以供压缩
    yuzo555
        6
    yuzo555  
       2021-06-27 15:00:21 +08:00   ❤️ 1
    “原函数应该也是”,大概率不是,这种一般是自动优化压缩后的代码。优化器大部分都会这样处理 return 。

    至于优化器为什么要这么处理,大概是为了节省体积。在这个例子里面看不出来,但如果有条件语句的话,还是能节约一对花括号的。
    nowheretoseek
        7
    nowheretoseek  
    OP
       2021-06-27 15:16:46 +08:00
    谢谢各位,搞明白了。
    原代码不是这样的机构,return 后出现多个逗号分隔的值是压缩导致的,逗号比分号提供更好的压缩率。
    ashong
        8
    ashong  
       2021-06-27 19:39:27 +08:00 via iPhone
    这是 minified 代码吧
    ouxch
        9
    ouxch  
       2021-06-27 22:12:10 +08:00
    @nowheretoseek
    哈哈我前不久也在公司 node 项目里看到这样的代码,lint 报了一个警告,我问遍了项目组的人都没人知道这写法啥意思,原来是老大以前写的。
    Google 了一下'nodejs return comma',出来的第一个就是这个:
    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comma_Operator
    逗号操作符 对它的每个操作数求值(从左到右),并返回最后一个操作数的值。
    跟 return 没啥关系,就是 js 支持的一种写法:逗号分割的表达式从左到右依次求值,并返回最后一个表达式的值。
    可以让代码更简洁,不过不推荐这种写法,不然 lint 也不会警告了😄。
    nowheretoseek
        10
    nowheretoseek  
    OP
       2021-06-27 22:47:25 +08:00
    @ashong 对,chrome 的 source 面板里对 minified 的代码 prettify 后得到的
    nowheretoseek
        11
    nowheretoseek  
    OP
       2021-06-27 22:48:17 +08:00
    @ouxch 的确不是常用写法,不是常看类似代码的话一开始容易懵
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2851 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:23 · PVG 17:23 · LAX 01:23 · JFK 04:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.