検索

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

javascript - js変数のスコープの問題

リーリー

module1.m2()count にアクセスできない理由を知りたいです。

代言代言2730日前733

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

  • 代言

    代言2017-06-12 09:30:08

    ヒント: m1 が count にアクセスできる理由は、m1 と count が同じ関数内で宣言されている、つまり同じスコープ内にあるためですが、m2 が配置されている関数は count Under と同じ関数内にないからです。スコープ内では、関数内に埋め込まれた関数間には関連性がないので、当然アクセスできません。

    質問者は module1 自体が count と同じ関数の下にあると考えているので、module1 にメソッドを追加します。このメソッドは count と同じスコープの下にありますか?

    返事
    0
  • typecho

    typecho2017-06-12 09:30:08

    字句スコープのため、JS 関数は静的スコープを持ちます。つまり、関数が定義されるときに、内部で m1 を定義すると、匿名関数がカウントを返します。定義されると、この関数の外部にあると判断されますvar count=0

    m2 を定義すると、無名関数はカウントを返します。このカウントのシンボル検索は、まずそれが定義されている場所内にあるかどうかを確認し、存在しない場合は上位層関数が定義されている場所を確認します。次に、最も外側の場所です。これはグローバル変数なので、ここでのカウントはグローバル変数です。

    そのため、module1.m2() は m1 で定義した count 変数にアクセスできません。静的字句スコープのため、m2 はそれを追跡できません。

    返事
    0
  • キャンセル返事