2017-03-10 60 views
1

代碼在野外:奇怪的JavaScript函數調用構造(0,<function>)()

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)(...)

這是怎麼回事與此包裝聲明?

+0

也許相關http://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript/9107367#9107367 – elclanrs

回答

0

它類似於這樣:因爲元素被包裹在括號被視爲值,並在括號中的最後一個值是由下面的函數執行

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

在這種括號。 0,沒有做任何事情。刪除0,不會改變代碼的運行方式,因此在這種情況下,我的數字0,只是模糊處理,因爲_decorateHandler2.default返回的是decorateSource返回的值。這樣做的好處(或上面的代碼示例)是,您正在創建一個closure,幫助您控制變量的範圍並且不污染全局範圍。