javascript中这种两个括号连接在一起语法是什么意思?

我在查看Vue开源UI组件Vant的源码时发现了这么一段代码:
function onClick(event) {

if (!loading && !disabled) {
  (0, _functional.emit)(ctx, 'click', event);
  (0, _router.functionalRoute)(ctx);
}

}
我想问的事其中(0, _functional.emit)(ctx, 'click', event);这种两个括号连在一起是什么意思,有什么作用呢?从来没见过这种语法,求大神解惑。

阅读 6.5k
2 个回答
(0, _functional.emit)(ctx, 'click', event);
// (a,b) 逗号运算符连接的表达式返回最后一组表达式的值,也就是 相当于
var tmp_fn = _functional.emit
tmp_fn(ctx, 'click', event);
// 之所以这么干,是希望在emit 方法内部不绑定this

如果直接使用 _functional.emit(ctx, 'click', event) emit执行环境中的 this 就是 _functional

这是打包后的模块吧,其中主要有两个语法:

  1. 圆括号操作符与逗号操作符
  2. 函数调用

第一个圆括号运算符是提升表达式优先级,圆括号里的表达式包含了逗号操作符. 逗号操作符对它的每个操作数求值(从左到右),并返回最后一个操作数的值。在式中就是(0, _functional.emit)返回了 _functional.emit, 也就是一个函数。

接着进行函数调用_functional.emit(ctx, 'click', event),传入实参ctx, 'click', event完成函数调用。

推荐问题