奇怪的JavaScript函数调用构造(0,<function>)()

时间:2017-03-10 17:52:55

标签: javascript

野外代码:

return function decorateSource(DecoratedComponent) {
    return (0, _decorateHandler2.default)({
        connectBackend: function connectBackend(backend, sourceId) {
            return backend.connectDragSource(sourceId);
        },
        containerDisplayName: 'DragSource',
        createHandler: createSource,
        registerHandler: _registerSource2.default,
        createMonitor: _createSourceMonitor2.default,
        createConnector: _createSourceConnector2.default,
        DecoratedComponent: DecoratedComponent,
        getType: getType,
        collect: collect,
        options: options
    });
};

有问题的结构:

(0, _decorateHandler2.default)(...)

此包装声明的内容是什么?

1 个答案:

答案 0 :(得分:0)

这与此类似:

(function(){
    // do something
})();

因为元素被包装在括号中被视为一个值,括号中的最后一个值被以下括号作为函数执行。 0,没有做任何事情。删除0,不会改变代码的运行方式,因此在这种情况下,我认为0,只是混淆,因为_decorateHandler2.default返回的是decorateSource返回的内容。这样做的好处(或上面的代码示例)是您创建closure来帮助您控制变量的范围而不会污染全局范围。