2017-11-08 21 views
5

code generated by Babelからthis sourceに私がこれを見つけました。何とか必要な機能を守っているように見えます。JSで(0、func)()を呼び出す目的は何ですか?

私は括弧内のコンマ文が 0を破棄し、 validateNextState関数を返しますが、なぜ単にない方法を理解
(0, _utilities.validateNextState)(nextDomainState, reducerName, action); 

_utilities.validateNextState(nextDomainState, reducerName, action); 

を私の推測では、閉鎖ガードスコープのようなガードのタイプ(あります、またはsetTimeoutは関数呼び出しを非同期にします)、目的が何であるか把握できません。

+2

おそらく、 'this'を' _utilities'に設定することは避けてください。 – user2357112

答えて

3

JavaScriptの時々不思議なセマンティクスが原因かもしれません。式

(0, _utilities.validateNextState) 

はもちろん、その関数への参照を評価します。しかし、その括弧で囲まれた部分式の中にあるので、その外にある関数呼び出しは、_utilitiesオブジェクトが電話のコンテキスト(thisの値)と認識されるなしでになります。したがって、validateNextState関数内では、thisは、 "strict"モードの状態に応じて、undefinedまたはグローバルオブジェクトへの参照になります。

元のソースコードでは、validateNextState()への呼び出しがあたかもオブジェクトのメソッドではなく "裸の"関数であるかのように行われるため、Babelがそうしていると思います。 Babelは、thisの値がその特定の機能にとって重要かどうかを(おそらく)知ることはできませんが、安全に呼び出されるようにする必要があります。

+0

しかし '(_utilities.validateNextState)(args)'だけではないのですか?編集:明らかにこれはその効果がありませんが、私は理由が分かりません。 –

+0

@Derek朕會功夫JavaScriptが奇妙です。 – Pointy

+0

あなたは™@Pointyを忘れました:p –

関連する問題