场景
babel转译出来的代码中,经常会看到
(0, _xyz.default)(param1, param2)
这样的代码,一开始没有深思,见得多了,就有点好奇,为什么要这么干?
逗号表达式只是简单的执行逗号两边的表达式,然后返回逗号右边的表达式的值,咋看之下,(0, _xyz.default)这种用法没意义啊?
解密
其实,这里牵扯到js中的函数和方法的概念,如下所示:
// 函数调用,函数内部的this为空(严格模式下)
func(param);
// 方法调用,方法内部的this为obj
obj.method(param)
所以,上述的转译代码,其实是一种相对tricky的方式完成了一个函数调用,相当于下面的代码
// 以下代码和(0, _xyz.default)(param1, param2)等价
const func = _xyz.default;
func(param1, param2)
简化了书写,这也是逗号表达式难得的应用场景