var a = 1;
これらの JS コード行は実行時にエラーを報告しますが、その理由は何ですか?神に説明を求めてください
関数は JavaScript の最初の市民であるため、ここには関数のプロモーションがあります。上記のコードの最終的な実装は、次と同じ効果があります
これにより、元の関数名が上書きされます。
識別子が変数として宣言されています
まず、js について話しましょう。var a = 1 が表示された場合は、2 つのステップで解析する必要があります。まず、var a を現在のスコープの先頭まで上げてから、a = 1 になるまで下方向に解析します。値の割り当てを開始します
これは、変数と関数が同じ名前を持つ問題です。簡単に言うと、JS エンジンの解析順序は次のとおりです。 1. 変数と関数の宣言は現在のスコープの先頭に昇格します → var a ↑ と `function a( ){
}`2. 次に、残りのコード `a=1;a()`,
関数宣言が事前に行われるためです
1) 関数宣言が先頭になります2) 変数宣言も先頭になります3) 関数宣言は変数宣言より先頭になります: (関数は変数の上にあります)4) 変数と代入ステートメントは一緒に記述した場合、js エンジンで解析すると、宣言と代入の 2 つの部分に分かれます。宣言は先頭に配置され、代入は元の位置に保持されます。5) 宣言された変数は繰り返し宣言されません。 。
と同等になります リーリー お役に立てば幸いです〜
多くの人がこれが変動昇進の問題であると述べていますが、その説明は完全に正しくありません。 var部分的な改善が行われ、全体として機能が向上します。参考までに
var
次のようになります:
関数は JavaScript の最初の市民であるため、ここには関数のプロモーションがあります。上記のコードの最終的な実装は、次と同じ効果があります
リーリーこれにより、元の関数名が上書きされます。
識別子が変数として宣言されています
まず、js について話しましょう。var a = 1 が表示された場合は、2 つのステップで解析する必要があります。まず、var a を現在のスコープの先頭まで上げてから、a = 1 になるまで下方向に解析します。値の割り当てを開始します
これは、変数と関数が同じ名前を持つ問題です。簡単に言うと、JS エンジンの解析順序は次のとおりです。
リーリー1. 変数と関数の宣言は現在のスコープの先頭に昇格します → var a ↑ と `function a( )
{
}`
を解析します。2. 次に、残りのコード `a=1;
a()`,
関数宣言が事前に行われるためです
リーリー1) 関数宣言が先頭になります
は次の2) 変数宣言も先頭になります
3) 関数宣言は変数宣言より先頭になります: (関数は変数の上にあります)
4) 変数と代入ステートメントは一緒に記述した場合、js エンジンで解析すると、宣言と代入の 2 つの部分に分かれます。宣言は先頭に配置され、代入は元の位置に保持されます。5) 宣言された変数は繰り返し宣言されません。 。
と同等になります リーリー お役に立てば幸いです〜
多くの人がこれが変動昇進の問題であると述べていますが、その説明は完全に正しくありません。
var
部分的な改善が行われ、全体として機能が向上します。参考までに次のようになります:
リーリー