我一直试图学习和理解KnexJS源代码,直到遇到一段我不知道它是什么的代码。
config = (0, _lodash.assign)({}, config, {
connection: (0, _parseConnection2.default)(config.connection).connection
});
简体版
config = (0, Args1)({}, config, {Args2});
让我感到困惑的是,在括号前没有“功能”关键字或任何“标识符” ...
我在这里找到了相同但没有相似的问题:double parentheses,这是可以理解且不同的...它是有效的JS吗?如果是,那是什么意思?
答案 0 :(得分:2)
它是逗号运算符(计算以逗号分隔的表达式列表,解析为最后一个表达式的值),并结合了带有全局调用上下文而不是{的调用上下文的_lodash.assign
的调用{1}}。这是一个更简单的示例:
_lodash
如您所见,单独调用const obj = {
abc: function(arg) {
console.log(this);
console.log('abc called with ' + arg);
}
}
obj.abc('foo');
(0, obj.abc)('foo')
会导致调用上下文为obj.abc
,而obj
会导致调用上下文为(0, obj.abc)('foo')
。我认为这是一种缩小技术-更清晰,更易理解的代码看起来像
window
或
obj.abc.call(window, 'foo')