0

JavaScript で要素をグローバルにするのは得策ではないと聞いたことがあります。理由がわかりません。IEでは扱えないものですか?

例えば:

    div = getElementById('topbar');
4

4 に答える 4

7

それは実装の問題ではないと思いますが、良い習慣と悪い習慣の問題です。通常、global * は悪い習慣であり、避けるべきです (グローバル変数など)。これは、プロジェクトのスコープがどのように展開され、ファイルがどのように含まれるかが実際にはわからないためです。

私は JS フリークではないので、なぜ JS イベントが悪いのかを正確に説明することはできませんが、Christian Heilmann が JS のベスト プラクティスについて語っています。「JSのベストプラクティス」もググってみてください

編集:グローバル変数に関するウィキペディア。これはあなたの問題にも当てはまる可能性があります:

[グローバル変数] は通常、その非局所性のために悪い習慣と見なされます。グローバル変数は、(保護されたメモリに存在しない限り) どこからでも変更される可能性があり、プログラムの任意の部分がそれに依存する可能性があります。したがって、グローバル変数には相互依存関係を作成する無限の可能性があり、相互依存関係を追加すると複雑さが増します。離れた場所でのアクションを参照してください。ただし、いくつかのケースでは、グローバル変数が使用に適している場合があります。たとえば、頻繁に使用される変数を複数の関数で連続して渡す必要がないようにするために使用できます。

http://en.wikipedia.org/wiki/Global_variable経由

于 2009-04-27T18:18:05.530 に答える
4

IEでは扱えないものですか?

いいえ、それは IE のものではありません。コードがドキュメントで使用される唯一のスクリプトになるとは決して想定できません。そのため、他のスクリプトがオーバーライドできるグローバルな関数名や変数名がコードに含まれていないことを確認することが重要です。

例については、他の人とよく遊ぶを参照してください。

于 2009-04-27T18:14:41.200 に答える
2

「イベント」とは、イベント処理 JavaScript (関数) を意味すると思います。

一般に、JS で複数のグローバル変数を使用するのはよくありません。(将来の使用のためにデータを保存している場合、少なくとも 1 つを使用しないことは不可能です。) これは、すべての名前空間が解決しようとするのと同じ問題に遭遇するためです。 doSomething() と呼ばれるメソッド?

これを回避する最善の方法は、すべてのデータと関数を保持するオブジェクトであるグローバル変数を作成することです。例えば:

var MyStuff = {};
MyStuff.counter = 0;
MyStuff.eventHandler = function() { ... };
MyStuff.doSomething = function() { ... };

// Later, when you want to call doSomething()...
MyStuff.doSomething();

このようにして、グローバル名前空間の汚染を最小限に抑えます。他の誰かがあなたのグローバル変数を使用することだけを心配する必要があります。

もちろん、あなたのコードが他の人のコードとまったく一緒に動かないのであれば、これは何の問題もありません... しかし、この種の考え方は、あなたが他の誰かのコードを使うことになった場合、後であなたを苦しめます. 誰もが JS のグローバル名に関して仲良くしている限り、すべてのコードはうまくいきます。

于 2009-04-27T18:23:47.933 に答える
1

グローバル変数を一意の名前空間/オブジェクト内にラップしている限り、コードでグローバル変数を使用しても問題はありません (自分のものではないスクリプトとの衝突を避けるため)。

JavaScript でグローバル変数を使用する主な利点は、JavaScript が強力な型言語ではないという事実に由来します。そのため、いくつかの複雑なオブジェクトを引数として関数に渡すと、それらのオブジェクト (関数スコープ内) のすべてのインテリジェンスがおそらく失われます。代わりにグローバル オブジェクトを使用すると、そのインテリジェンスが保持されます。

私は個人的にそれが非常に便利であると感じており、それは確かに私のコードに含まれています。

(もちろん、ロケール変数とグローバル変数の間で常に適切なバランスを取る必要があります)

于 2012-07-15T07:18:38.007 に答える