検索

ホームページ  >  に質問  >  本文

javascript - 関数宣言と変数宣言の優先順位

リーリー

以前、関数と変数の名前が同じ場合、関数宣言の昇格によって変数宣言の昇格が上書きされるのではないかと考え、次のコードをテストしました

リーリー

console.log(f)の出力は位置によって異なりますが、誰が誰を上書きしたのか、それとも何か別の理由があるのでしょうか?
説明をお願いします

学习ing学习ing2764日前896

全員に返信(7)返信します

  • 黄舟

    黄舟2017-06-12 09:30:15

    最初の段落

    リーリー

    =>

    と同等 リーリー




    第 2 段落

    リーリー

    =>

    と同等 リーリー

    参照
    https://www.zhihu.com/questio...

    返事
    0
  • 某草草

    某草草2017-06-12 09:30:15

    ブロック内にない関数を定義する場合は、最初に関数をホイストしてから変数宣言を行ってください。ECMAScript 5、セクション 10.5 を参照してください。

    例は次のとおりです:

    リーリー

    上記の出力は関数です。未定義ではないので、最初に関数をプロモートし、次に変数宣言をプロモートします。

    返事
    0
  • PHP中文网

    PHP中文网2017-06-12 09:30:15

    JS インタープリターは最初に var ステートメントをプロモートします。 は代入ステートメントではなく var 宣言ステートメントをプロモートすることに注意してください。
    それでは関数宣言を進めていきます。したがって、上記の状況が形成されます

    2番目の場合は、吊り上げとは関係ないと思います。それも改良して出力していますが。 。したがって、JS が弱い型付け言語であることを証明するには良い選択です = =var f,但这里关键在于执行赋值 f = 2

    私の言ったことは曖昧かもしれません、LZ、他の人の説明を見た方が良いです

    返事
    0
  • 黄舟

    黄舟2017-06-12 09:30:15

    ECMA 標準に従って、関数宣言が最初に昇格されますが、正直に言うと、どちらが先に昇格されても、実際には結果は同じです。

    返事
    0
  • 为情所困

    为情所困2017-06-12 09:30:15

    最初のコードは変数昇格、var f=unknown で、変数 f は関数を指します。2 番目のコードは JavaScript の実行順序に従って f に 2 を割り当てます。

    返事
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:30:15

    jsを実行すると上から下へ実行されます。

    リーリー

    このコードでは、関数宣言 function f と変数宣言 var f が一緒にプロモートされますが、関数宣言の優先順位が高くなるため、
    コードは次のようになります。 リーリー

    f=2 (代入に属し、位置は変更されませんが、変数宣言が改善されます)

    2番目のコード

    リーリー

    上記のメソッドを使用して

    を理解すると、JS エンジンによって
    として理解されます リーリー

    関数 f は変数 f で上書きされるため、出力は 2 になります

    返事
    0
  • 黄舟

    黄舟2017-06-12 09:30:15

    リーリー

    ycloudが言っているように、上記の理由は「関数定義の昇格はifのブロックスコープにのみ昇格される」ためです

    リーリー

    関数定義が if ブロック スコープにのみプロモートされる場合、上記の理由は何ですか? (Chrome58テスト) ifブロックスコープ内の関数に外部からアクセスできるのはなぜですか?

    返事
    0
  • キャンセル返事