これは js 昇格の例です関数宣言にコードがあることを確認してください
このコードには無効な構文があると言われています。ほとんどのブラウザは 2 番目のステートメントを返しますが、Firefox は最初のステートメントを返します。これはなぜですか? 関数式に変更できるのであれば、なぜそうなるのでしょうか?
最初のものは関数宣言ですが、関数は一般的に if-else で宣言されないためです
2 番目の方法は、変数に匿名関数を代入することです。プロモーションなどというものはありません。
関数 xxx(){} を直接記述すると、同じ名前の関数が 2 つある場合、先頭で var xxx を 2 回実行することと同じになるため、無効になります
宣言プレフィックスとは関係ありません。当時、JavaScript の仕様はまだ ES5 であり、ブラウザーにはまだブロックレベルのスコープ (ES2016+) が実装されておらず、スコープレベルは関数レベルのみでした。だからあなたはそれを書きました
と
本質的な違いはありません
jsは事前に宣言されています! ! !関数は、宣言時にスコープの先頭で直接言及されます。 if にはスコープがないため、2 つの関数は 1 つのスコープであり、2 番目の関数が最初の関数を置き換えます。 ! 2 番目のコードでは、最初に変数 Sayhi を宣言し、if 判定の後に Sayhi に値を代入します。
最初のものは関数宣言ですが、関数は一般的に if-else で宣言されないためです
2 番目の方法は、変数に匿名関数を代入することです。プロモーションなどというものはありません。
関数 xxx(){} を直接記述すると、同じ名前の関数が 2 つある場合、先頭で var xxx を 2 回実行することと同じになるため、無効になります
。宣言プレフィックスとは関係ありません。当時、JavaScript の仕様はまだ ES5 であり、ブラウザーにはまだブロックレベルのスコープ (ES2016+) が実装されておらず、スコープレベルは関数レベルのみでした。だからあなたはそれを書きました
リーリーと
によって書かれました リーリー本質的な違いはありません
jsは事前に宣言されています! ! !関数は、宣言時にスコープの先頭で直接言及されます。 if にはスコープがないため、2 つの関数は 1 つのスコープであり、2 番目の関数が最初の関数を置き換えます。 ! 2 番目のコードでは、最初に変数 Sayhi を宣言し、if 判定の後に Sayhi に値を代入します。