在方法调用中使用逗号表达式是什么意思,比如`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 code 是 let proc = postcss();
,postcss
是 ES6 导入。此特定代码由 ES6 转译器生成,可能是 Babel。
查看 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 code 是 let proc = postcss();
,postcss
是 ES6 导入。此特定代码由 ES6 转译器生成,可能是 Babel。