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

JavaScriptの関数宣言を昇格させると、関数本体も一緒に昇格するのでしょうか?

javascript 関数宣言のプロモーション、関数本体も一緒にプロモーションされますか?

でない場合、次の反例があります:

リーリー

の場合、次の反例があります:

リーリー

最初の例は、関数本体もプロモートされることを示しています。この考え方に従って 2 番目のコードを理解すると、「名前変更」関数が相互にカバーし、後の関数が前の関数をカバーすることになります。 console.log( func) は文字列「function func() {console.log('22');};」を出力しますが、実際にはそうではありません。

3 つの疑問が生じます:

  1. 「変数のプロモーション、機能の優先順位」をどのように理解していますか?

  2. 関数本体も改良されているのでしょうか?

  3. 2 番目のコードの実行結果を解釈するにはどうすればよいですか?

PHP中文网PHP中文网2730日前690

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

  • PHPz

    PHPz2017-05-19 10:45:15

    私が書いた記事を読めばすべてが理解でき、JavaScriptの実行コンテキスト、関数スタック、プロモーションの概念を深く理解できると思います

    返事
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:45:15

    if は条件判定を表します。コンパイル中にコードは実行されず、構文と字句解析のみがチェックされます。ブラウザを変更してみたり、テスト用に厳密モードを有効にしてみると、予期せぬことが起こる可能性があります~

    1. 変数の昇格、関数の優先順位、つまり var a = 1; function fun(){}; および function fun(){} がスコープの最上位に昇格されます。
    2.も改善されました。関数式は var fun = function(){}; なので、そうではありません。この種の関数は var fun のみを改善します
    3. 2 番目の段落は、実際には次のように説明できます

    リーリー

    返事
    0
  • 天蓬老师

    天蓬老师2017-05-19 10:45:15

    詳しい紹介については、MDN http://kangax.github.io/nfe/#...を参照してください。

    返事
    0
  • 某草草

    某草草2017-05-19 10:45:15

    非厳密モードでは、if ステートメント内に配置された関数宣言がプロモートされるかどうかは、各カーネルの実装によって異なります。

    結論としては機能は改善されますが、if文内での各コアの実装に依存します。

    厳密モードでは、スクリプトまたは関数レベルではない関数宣言が禁止されます

    返事
    0
  • ringa_lee

    ringa_lee2017-05-19 10:45:15

    次を参照してください: /q/10...

    返事
    0
  • PHP中文网

    PHP中文网2017-05-19 10:45:15

    関数と変数の宣言はプロモートされます。関数のプロモートは変数のプロモートよりも優先されます。最初のコードは直接改良されています。 2 番目のコードで定義した関数は、if ステートメント構造内にあります。2 つのログと if は、実行中のスタックで順番に実行される必要があります。明らかに、関数は if ステートメントが実行される前に宣言されていません。

    返事
    0
  • 怪我咯

    怪我咯2017-05-19 10:45:15

    es6 にはブロックレベルのスコープ ルールがいくつかあり、古いバージョンのノードまたは以前のバージョンの Chrome で実行すると、次のコードと同等になります
    。 リーリー

    ただし、node と chrome のバージョンが高くなると、そのような変数の改善が制限され、コード内でこのような状況が発生します。 ~! ~

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-05-19 10:45:15

    JavaScript は関数レベルのスコープであるため (function-level scope
    所以if中并没有独立维护一个scope

    )

    英語の説明:
    javascript-variable-scope-and-hoisting-explained
    中国語の説明: Javascript スコープと変数ホイスティング

    返事
    0
  • PHP中文网

    PHP中文网2017-05-19 10:45:15

    一般に、条件ステートメントで関数宣言を記述することは推奨されません。
    これは ECMAScript の無効な構文であり、JavaScript エンジンはエラーを修正し、通常の適切な状態に変換しようとします。ただし、この修正方法はブラウザごとに異なります。関数式を使用することをお勧めします:
    var func;
    if(true){

    リーリー

    }その他{

    リーリー

    }

    返事
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:45:15

    http://blog.csdn.net/qq673318...
    リンクには説明があります
    ————ポーター

    返事
    0
  • キャンセル返事