0

そこで、JavaScript のスコープを把握しようとして、それに関する多くの情報を調べました。グローバル変数と競合するローカル変数を誤って作成してしまったという質問をたくさん見ました。

しかし、ローカル変数が競合しているにもかかわらず、グローバル変数を変更する方法があるかどうか疑問に思っていました。お気に入り:

    var globalVariable = 6;

    var func1 = function() {
       this.func2 = function() {
          var globalVariable = 99;   
                   = 7;
       }
    };
    print(globalVariable);

競合するローカル変数名にもかかわらず、グローバル変数の値を変更する方法はありますか?

出力として 7 を印刷しようとthis.globalVariable = 7すると、うまくいきませんでした。this.アクセスが機能しなかった理由、または競合する名前のローカルが発生した場合にグローバル変数を変更する方法があるかどうかを明確にすることはできますか?

this.明らかに、このようにコードを書くのは意味がありませんが、キーワードが常にグローバル変数/オブジェクトを指定していることを理解していると思いましたか?

4

2 に答える 2

0

this.「キーワードが常にグローバル変数/オブジェクトを指定することを理解したと思いましたか?」

いいえ。 の値はthis、関数の呼び出し方法と、関数が厳密モードかどうかによって異なります。

ブラウザのグローバル変数はwindowオブジェクトのプロパティであるため、次を使用します。

window.globalVariable = 7;

thisが と等しい場合もありwindowますが、多くの場合そうではありません。this(単にランダムに設定されるように聞こえるという意味ではありません。適用される特定のルール セットがあります。)

このようにグローバル変数とローカル変数を区別する必要がある場合は、使用しているグローバル変数が多すぎる可能性があることに注意してください。

于 2013-08-07T00:12:02.133 に答える
0

window['globalVariable'] = 7; を使用できます。

しかし、それは良い解決策ではありません。本当にありません。

「this」変数は、通常、現在の関数が持つスコープを参照します。ただし、他の何かにバインドされていないか、呼び出されたり適用されたりしている場合を除きます (.call/.apply)。かなり混乱する可能性があるため、グーグル関数スコープをお勧めします。

他に質問があれば、Skype にいます (10 倍)。

于 2013-08-07T00:11:13.207 に答える