関数パラメータのデフォルト値が関数である状況について多くの混乱があります
例
Ruan Yifeng の es6 の紹介によると、関数のパラメーターがデフォルト値の場合、最初にパラメーターをラップするブロックレベルのスコープがあり、初期化が完了するとブロックレベルのスコープが消えることがわかっています。
パラメータのデフォルト値が設定されると、関数が宣言されて初期化されるときに、パラメータは別のスコープ (コンテキスト) を形成します。初期化が完了すると、このスコープは消えます。パラメーターのデフォルト値が設定されていない場合、この構文の動作は表示されません。
デフォルト値が通常の変数であることは理解できますが、ここでの出力がなぜ内部ではなく外部であるのかはまだわかりません
一句话:函数的闭包在定义时形成,而非运行时。
把语法糖彻底展开,应该能看清楚点
你看,
fk_compiler
里是不是只能返回外部作用域下的foo
?js是词法作用域,foo值取函数定义时的值而不是执行时的值。
基于回复者的代码:
fk_compiler
被声明的作用域在全局,所以,它会去访问全局作用域中的foo
。答案也就出来了。类似代码: