関数パラメータのデフォルト値が関数である状況について多くの混乱があります
例
Ruan Yifeng の es6 の紹介によると、関数のパラメーターがデフォルト値の場合、最初にパラメーターをラップするブロックレベルのスコープがあり、初期化が完了するとブロックレベルのスコープが消えることがわかっています。
パラメータのデフォルト値が設定されると、関数が宣言されて初期化されるときに、パラメータは別のスコープ (コンテキスト) を形成します。初期化が完了すると、このスコープは消えます。パラメーターのデフォルト値が設定されていない場合、この構文の動作は表示されません。
デフォルト値が通常の変数であることは理解できますが、ここでの出力がなぜ内部ではなく外部であるのかはまだわかりません
一文: 関数のクロージャは、実行時ではなく定義時に形成されます。
糖衣構文を徹底的に展開すると、より明確に見えるはずです
リーリー見て、
fk_compiler
里是不是只能返回外部作用域下的foo
?js は字句スコープであり、foo の値は関数の実行時ではなく関数の定義時に値を取得します。
回答者コードに基づく:
リーリーfk_compiler
被声明的作用域在全局,所以,它会去访问全局作用域中的foo
。答えは出てくるでしょう。類似コード:
リーリー