js モジュラー記述を学習する際に生じる疑問、コードは次のとおりです。
module1.m2() が
count にアクセスできない理由を知りたいです。
代言2017-06-12 09:30:08
ヒント: m1 が count にアクセスできる理由は、m1 と count が同じ関数内で宣言されている、つまり同じスコープ内にあるためですが、m2 が配置されている関数は count Under と同じ関数内にないからです。スコープ内では、関数内に埋め込まれた関数間には関連性がないので、当然アクセスできません。
質問者は module1 自体が count と同じ関数の下にあると考えているので、module1 にメソッドを追加します。このメソッドは count と同じスコープの下にありますか?
typecho2017-06-12 09:30:08
字句スコープのため、JS 関数は静的スコープを持ちます。つまり、関数が定義されるときに、内部で m1 を定義すると、匿名関数がカウントを返します。定義されると、この関数の外部にあると判断されますvar count=0
。
m2 を定義すると、無名関数はカウントを返します。このカウントのシンボル検索は、まずそれが定義されている場所内にあるかどうかを確認し、存在しない場合は上位層関数が定義されている場所を確認します。次に、最も外側の場所です。これはグローバル変数なので、ここでのカウントはグローバル変数です。
そのため、module1.m2() は m1 で定義した count 変数にアクセスできません。静的字句スコープのため、m2 はそれを追跡できません。