在方法调用中使用逗号表达式是什么意思,比如`var proc = (0, _postcss2.default)();`

What is the meaning of using a comma expression in a method call, such as `var proc = (0, _postcss2.default)();`

查看 cssnano 源代码,我遇到了这一行

var proc = (0, _postcss2.default)();

根据我的测试,它似乎与

做同样的事情

var proc = _postcss2.default();

为什么 cssnano 使用第一种语法分配 proc

有一个细微的差别,根据两次不同的调用,this的值在default中是不同的。考虑以下代码:

var _postcss2 = {
    default: function() {
        return this;
    }
};

var proc = (0, _postcss2.default)();
console.log(proc); // proc === window (or undefined in strict mode)

var proc = _postcss2.default();
console.log(proc); // proc === _postcss2

_postcss2.default() 调用 default 作为 _postcss2 对象的方法并相应地设置 this,但 (0, _postcss2.default)(); 没有,并且 this 在非严格模式下为 window,在严格模式下为 undefined

the comma operator的工作方式是执行所有的表达式,但只返回最后的表达式,所以0,是一个简短的无意义的表达式,使用逗号运算符来获取函数引用自身,而不先将其设置为变量。

如果这在这种特殊情况下有所不同,我不能不看代码本身就说。

此代码的 corresponding line from the source codelet proc = postcss();postcss 是 ES6 导入。此特定代码由 ES6 转译器生成,可能是 Babel。