这是 javascript 的什么语法

2021-06-27 10:54:45 +08:00
 nowheretoseek

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

1818 次点击
所在节点    问与答
7 条回复
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
2021-06-27 11:00:33 +08:00
@Jeremial #1
编译到 es5 应该是

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

const 是 es6 关键字,编译到 es5 会变成 var
otakustay
2021-06-27 11:03:00 +08:00
@Jeremial (0, i.default)()并不完全等同于 i.default(),前者的 this 是 global,后者的 this 是 i
otakustay
2021-06-27 11:03:54 +08:00
简单来说,(0, i.default)是逗号运算符,会把 i.default 拿出来,所以这代码更等同于:
var v = i.default;
v();
作用是强制 this 为 global 对象,但多加个 var 代码就变长了,所以用逗号是最优解
nowheretoseek
2021-06-27 11:04:12 +08:00
@Jeremial 学习了,非常感谢!
nowheretoseek
2021-06-27 11:07:09 +08:00
@otakustay 看明白了,谢谢!
jiyinyiyong
2021-06-28 16:33:59 +08:00
目测 webpack 打包生成的模块代码, 压缩了信息丢了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/786022

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX