名前付き関数宣言をreturnステートメント内に配置すると、それが引き上げられないのはなぜですか?

チンジャオ

関数宣言をreturnステートメントの横に置くと、関数が巻き上げられなくなりますか?または、returnステートメント内に配置すると、関数式に変換されます。そのため、持ち上げられませんか?

// Hoisting doesn't work in here
function outer() {
  console.log(inner); // Isn't hoisted
  return function inner() {
    console.log("hello world");
  };
}
outer();

// Works in here
function outer() {
  console.log(inner);

  function inner() {
    console.log("hello world");
  }
  return inner;
}
outer();

特定のパフォーマンス

キーワードのfunction直後に置くとreturn、関数宣言ではなくなります。returnその右側にのみ持つことができるため、関数式として解釈され、関数式は引き上げられません(またはその名前が変数として周囲のスコープに入れられます)。

これは特別なことではありませんreturnfunctionパーツを式として解釈するように強制する他のキーワードは、同じ効果があります。

function outer() {
  console.log(typeof inner); // Isn't hoisted
  if (function inner() {
    console.log("hello world");
  }) {
  }
}
outer();

function outer() {
  console.log(typeof inner); // Isn't hoisted
  switch (function inner() { console.log("hello world"); }) {
  
  }
}
outer();

function outer() {
  console.log(typeof inner); // Isn't hoisted
  const x = function inner() {
    console.log("hello world");
  };
}
outer();

関数が関数宣言として解釈されるためには(そして関数宣言が引き上げられる唯一の関数である)、function演算子またはキーワードを介してコード内の他のステートメントに直接接続されていないスタンドアロンステートメントである必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

条件ブロック内の関数宣言が、FirefoxではなくChromeの関数スコープに引き上げられるのはなぜですか?

分類Dev

関数内に同じ名前の変数を作成するときに、関数の引数が上書きされないのはなぜですか?

分類Dev

Javascript:ifステートメントが関数内の持ち上げられた変数を評価しないのはなぜですか

分類Dev

クラス内のJavaScript関数が引き上げられないのはなぜですか?

分類Dev

これらの .append() ステートメントが互いに上書きするのはなぜですか?

分類Dev

importステートメントが関数内に配置されることが珍しいのはなぜですか?

分類Dev

テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

分類Dev

テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

分類Dev

テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

分類Dev

Pythonの__init__関数に、その関数であるにもかかわらずreturnステートメントがないのはなぜですか

分類Dev

ここにprint関数ステートメントを配置できないのはなぜですか?

分類Dev

パラメータがデフォルト値に設定されていても、letを使用して1つの関数パラメータと同じ名前を使用して変数を宣言できないのはなぜですか?

分類Dev

「if」ステートメントで整数の前にゼロを付けられないのはなぜですか

分類Dev

テンプレート関数を呼び出すときに引数変換が考慮されないのはなぜですか?

分類Dev

「ifステートメント」が満たされない場合でも、「ifステートメント」内の関数は引き続き実行されます。

分類Dev

関数が終了する直前にreturnステートメントを配置する必要があるのはなぜですか?

分類Dev

var name = function(){...}の形式の関数がES5で引き上げられないのはなぜですか?

分類Dev

bashスクリプトにスリープを追加すると、特定の名前付き変数の変数のデクリメントが壊れるように見えるのはなぜですか?

分類Dev

このifステートメント内にネストされているときにrequestAnimationFrame()が機能しないのはなぜですか?

分類Dev

プロパティの型ヒントを導入すると、「初期化前に型付きプロパティにアクセスしてはならない」というエラーが突然表示されるのはなぜですか?

分類Dev

プロパティの型ヒントを導入すると、「初期化前に型付きプロパティにアクセスしてはならない」というエラーが突然表示されるのはなぜですか?

分類Dev

TypeScriptは、関数のパラメーターが型付き関数に渡されるときに、それらのパラメーターの型を推測しないのはなぜですか?

分類Dev

dartのオプションの名前付き引数が指定されていない場合にnullにならないのはなぜですか?

分類Dev

同じ名前のエントリを1つのリスト要素にグループ化しながら、名前付きベクトルを名前付きリストに変換するにはどうすればよいですか?

分類Dev

関数内でテンプレート化された型エイリアスを宣言できないのはなぜですか?

分類Dev

VBAでインターフェイスを実装するときに、引数の名前がRHSに変更されるのはなぜですか?

分類Dev

Javascriptオブジェクト内の名前付き関数?なぜこれが機能するのですか?

分類Dev

静的メンバー関数がクラス定義内でのみ静的に宣言でき、それ自体の定義内でも宣言できないのはなぜですか?

分類Dev

リストから関数をランダムに選択し、それがどの関数であるかをテストするときの奇妙な動作

Related 関連記事

  1. 1

    条件ブロック内の関数宣言が、FirefoxではなくChromeの関数スコープに引き上げられるのはなぜですか?

  2. 2

    関数内に同じ名前の変数を作成するときに、関数の引数が上書きされないのはなぜですか?

  3. 3

    Javascript:ifステートメントが関数内の持ち上げられた変数を評価しないのはなぜですか

  4. 4

    クラス内のJavaScript関数が引き上げられないのはなぜですか?

  5. 5

    これらの .append() ステートメントが互いに上書きするのはなぜですか?

  6. 6

    importステートメントが関数内に配置されることが珍しいのはなぜですか?

  7. 7

    テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

  8. 8

    テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

  9. 9

    テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

  10. 10

    Pythonの__init__関数に、その関数であるにもかかわらずreturnステートメントがないのはなぜですか

  11. 11

    ここにprint関数ステートメントを配置できないのはなぜですか?

  12. 12

    パラメータがデフォルト値に設定されていても、letを使用して1つの関数パラメータと同じ名前を使用して変数を宣言できないのはなぜですか?

  13. 13

    「if」ステートメントで整数の前にゼロを付けられないのはなぜですか

  14. 14

    テンプレート関数を呼び出すときに引数変換が考慮されないのはなぜですか?

  15. 15

    「ifステートメント」が満たされない場合でも、「ifステートメント」内の関数は引き続き実行されます。

  16. 16

    関数が終了する直前にreturnステートメントを配置する必要があるのはなぜですか?

  17. 17

    var name = function(){...}の形式の関数がES5で引き上げられないのはなぜですか?

  18. 18

    bashスクリプトにスリープを追加すると、特定の名前付き変数の変数のデクリメントが壊れるように見えるのはなぜですか?

  19. 19

    このifステートメント内にネストされているときにrequestAnimationFrame()が機能しないのはなぜですか?

  20. 20

    プロパティの型ヒントを導入すると、「初期化前に型付きプロパティにアクセスしてはならない」というエラーが突然表示されるのはなぜですか?

  21. 21

    プロパティの型ヒントを導入すると、「初期化前に型付きプロパティにアクセスしてはならない」というエラーが突然表示されるのはなぜですか?

  22. 22

    TypeScriptは、関数のパラメーターが型付き関数に渡されるときに、それらのパラメーターの型を推測しないのはなぜですか?

  23. 23

    dartのオプションの名前付き引数が指定されていない場合にnullにならないのはなぜですか?

  24. 24

    同じ名前のエントリを1つのリスト要素にグループ化しながら、名前付きベクトルを名前付きリストに変換するにはどうすればよいですか?

  25. 25

    関数内でテンプレート化された型エイリアスを宣言できないのはなぜですか?

  26. 26

    VBAでインターフェイスを実装するときに、引数の名前がRHSに変更されるのはなぜですか?

  27. 27

    Javascriptオブジェクト内の名前付き関数?なぜこれが機能するのですか?

  28. 28

    静的メンバー関数がクラス定義内でのみ静的に宣言でき、それ自体の定義内でも宣言できないのはなぜですか?

  29. 29

    リストから関数をランダムに選択し、それがどの関数であるかをテストするときの奇妙な動作

ホットタグ

アーカイブ