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

javascript - ES6 の関数パラメータのデフォルト値が関数であることに問題がありますか?

関数パラメータのデフォルト値が関数である状況について多くの混乱があります

リーリー

Ruan Yifeng の es6 の紹介によると、関数のパラメーターがデフォルト値の場合、最初にパラメーターをラップするブロックレベルのスコープがあり、初期化が完了するとブロックレベルのスコープが消えることがわかっています。

パラメータのデフォルト値が設定されると、関数が宣言されて初期化されるときに、パラメータは別のスコープ (コンテキスト) を形成します。初期化が完了すると、このスコープは消えます。パラメーターのデフォルト値が設定されていない場合、この構文の動作は表示されません。

デフォルト値が通常の変数であることは理解できますが、ここでの出力がなぜ内部ではなく外部であるのかはまだわかりません

阿神阿神2684日前1292

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

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-07-05 11:11:13

    一文: 関数のクロージャは、実行時ではなく定義時に形成されます。

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-07-05 11:11:13

    糖衣構文を徹底的に展開すると、より明確に見えるはずです

    リーリー

    見て、fk_compiler里是不是只能返回外部作用域下的foo?

    返事
    0
  • 習慣沉默

    習慣沉默2017-07-05 11:11:13

    js は字句スコープであり、foo の値は関数の実行時ではなく関数の定義時に値を取得します。

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-07-05 11:11:13

    回答者コードに基づく:

    リーリー

    js は字句スコープを採用しているため、関数がどこで呼び出されても、どのような形式であっても、関数の字句スコープは宣言時の位置によってのみ決定されます。

    fk_compiler被声明的作用域在全局,所以,它会去访问全局作用域中的foo。答えは出てくるでしょう。

    類似コード:

    リーリー

    返事
    0
  • キャンセル返事