调试学习某问答网站的 js 源码,发现大量类似 var y = (0,i.default)()
的代码,y 、i 是混淆过的,default 似乎是 key 名称,是获取 i 这个 object 的子函数。
有阵子不大用 js 了,看不明白(0,i.default)
是怎么运作的,是调用了父对象的某个匿名函数吗,还是什么框架的语法,请教各位。
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(), 出现这种一般是编译工具自动生成的代码 |
2
Jeremial 2021-06-27 11:00:33 +08:00 1
|
3
otakustay 2021-06-27 11:03:00 +08:00 3
@Jeremial (0, i.default)()并不完全等同于 i.default(),前者的 this 是 global,后者的 this 是 i
|
4
otakustay 2021-06-27 11:03:54 +08:00 13
简单来说,(0, i.default)是逗号运算符,会把 i.default 拿出来,所以这代码更等同于:
var v = i.default; v(); 作用是强制 this 为 global 对象,但多加个 var 代码就变长了,所以用逗号是最优解 |
5
nowheretoseek OP @Jeremial 学习了,非常感谢!
|
6
nowheretoseek OP @otakustay 看明白了,谢谢!
|
7
jiyinyiyong 2021-06-28 16:33:59 +08:00
目测 webpack 打包生成的模块代码, 压缩了信息丢了.
|