次のコード:
リーリー実行後の出力は未定義です。
if 条件を削除した後の出力は 2 番目の関数です
リーリー関数がプロモートされたことがわかると、2 番目のコードでは、2 番目の a 関数が console.log(a) コードの前にプロモートされるため、2 番目の a 関数が実行されて出力されます。
しかし、コードの最初の部分で、なぜ unknown が出力されるのかわかりません。
代言2017-06-12 09:32:06
条件付き関数宣言は関数式と同じ方法で処理されます。したがって、条件付き関数宣言では、関数宣言のホイスティング特性が失われます。
参考URL:/q/10...
怪我咯2017-06-12 09:32:06
if else ステートメントで function キーワードを使用して関数を宣言する場合、変数の昇格はブラウザーによって異なります。ここでは変数の宣言がプロモートされているだけで、else が削除されると純粋な関数スコープになります。
リーリー学习ing2017-06-12 09:32:06
あなたの IIFE で
リーリーは関数宣言ではなく関数式です。 if が削除されていない場合、conosle.log(a)、a は未定義変数 a を表します。https://developer を参照してください。モジラ..