javascript - ES6 の関数パラメータのデフォルト値が関数であることに問題がありますか?
阿神
阿神 2017-07-05 11:09:13
0
4
1323

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

リーリー

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

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

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

阿神
阿神

闭关修行中......

全員に返信(4)
曾经蜡笔没有小新

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

いいねを押す +0
给我你的怀抱

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

リーリー

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

いいねを押す +0
習慣沉默

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

いいねを押す +0
给我你的怀抱

回答者コードに基づく:

リーリー

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

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

類似コード:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート