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

这是 javascript 的什么语法

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

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

    7 条回复    2021-06-28 16:33:59 +08:00
    Jeremial
        1
    Jeremial  
       2021-06-27 10:59:48 +08:00
    import foo from 'foo'
    foo()

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

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

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

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

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

    const 是 es6 关键字,编译到 es5 会变成 var
    otakustay
        3
    otakustay  
       2021-06-27 11:03:00 +08:00   ❤️ 3
    @Jeremial (0, i.default)()并不完全等同于 i.default(),前者的 this 是 global,后者的 this 是 i
    otakustay
        4
    otakustay  
       2021-06-27 11:03:54 +08:00   ❤️ 13
    简单来说,(0, i.default)是逗号运算符,会把 i.default 拿出来,所以这代码更等同于:
    var v = i.default;
    v();
    作用是强制 this 为 global 对象,但多加个 var 代码就变长了,所以用逗号是最优解
    nowheretoseek
        5
    nowheretoseek  
    OP
       2021-06-27 11:04:12 +08:00
    @Jeremial 学习了,非常感谢!
    nowheretoseek
        6
    nowheretoseek  
    OP
       2021-06-27 11:07:09 +08:00
    @otakustay 看明白了,谢谢!
    jiyinyiyong
        7
    jiyinyiyong  
       2021-06-28 16:33:59 +08:00
    目测 webpack 打包生成的模块代码, 压缩了信息丢了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:39 · PVG 05:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.