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