javascript - 関数宣言と変数宣言の優先順位
学习ing
学习ing 2017-06-12 09:28:15
0
7
883
リーリー

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

リーリー

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

学习ing
学习ing

全員に返信(7)
黄舟

最初の段落

リーリー

=>

と同等 リーリー




第 2 段落

リーリー

=>

と同等 リーリー

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

いいねを押す +0
某草草

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

例は次のとおりです:

リーリー

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

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

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

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

いいねを押す +0
黄舟

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

いいねを押す +0
为情所困

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

いいねを押す +0
漂亮男人

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

リーリー

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

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

2番目のコード

リーリー

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

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

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

いいねを押す +0
黄舟

リーリー

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

リーリー

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート