NickyHaris
V2EX  ›  问与答

这是 javascript 的什么语法

  •  
  •   NickyHaris · Jun 27, 2021 · 2363 views
    This topic created in 1785 days ago, the information mentioned may be changed or developed.

    调试学习某问答网站的 js 源码,发现大量类似 var y = (0,i.default)() 的代码,y 、i 是混淆过的,default 似乎是 key 名称,是获取 i 这个 object 的子函数。 有阵子不大用 js 了,看不明白(0,i.default)是怎么运作的,是调用了父对象的某个匿名函数吗,还是什么框架的语法,请教各位。

    7 replies    2021-06-28 16:33:59 +08:00
    ik0r
        1
    ik0r  
       Jun 27, 2021
    import foo from 'foo'
    foo()

    这种 es6 写法编译到 es5 会变成

    const foo = require('foo')
    foo.default()

    (0, i.default) 这种就是 js 里面的逗号运算符,返回最后一个

    (0, i.default)() 其实就是运行  i.default(), 出现这种一般是编译工具自动生成的代码
    ik0r
        2
    ik0r  
       Jun 27, 2021   ❤️ 1
    @Jeremial #1
    编译到 es5 应该是

    var foo = require('foo');
    foo.default()

    const 是 es6 关键字,编译到 es5 会变成 var
    otakustay
        3
    otakustay  
       Jun 27, 2021   ❤️ 3
    @Jeremial (0, i.default)()并不完全等同于 i.default(),前者的 this 是 global,后者的 this 是 i
    otakustay
        4
    otakustay  
       Jun 27, 2021   ❤️ 13
    简单来说,(0, i.default)是逗号运算符,会把 i.default 拿出来,所以这代码更等同于:
    var v = i.default;
    v();
    作用是强制 this 为 global 对象,但多加个 var 代码就变长了,所以用逗号是最优解
    NickyHaris
        5
    NickyHaris  
    OP
       Jun 27, 2021
    @Jeremial 学习了,非常感谢!
    NickyHaris
        6
    NickyHaris  
    OP
       Jun 27, 2021
    @otakustay 看明白了,谢谢!
    jiyinyiyong
        7
    jiyinyiyong  
       Jun 28, 2021
    目测 webpack 打包生成的模块代码, 压缩了信息丢了.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1568 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:24 · PVG 00:24 · LAX 09:24 · JFK 12:24
    ♥ Do have faith in what you're doing.