0

グローバル変数と関数でグローバル名前空間を乱雑にすることの危険性について読み続けています。

グローバル関数を定義する「古い」方法は、特に複数の開発者が同じプロジェクトで作業している状況では問題があることを読みました。

私は理解していて、できる限り最高のコードを書きたいと思っていますが、上記のステートメントは私を混乱させます。

開発者がプロ​​ジェクトの同じページで作業することはめったにありません。ユーザーがプロジェクトのページを変更すると、グローバル名前空間がクリアされると思います。

そうではありませんか?

4

4 に答える 4

1

「開発者がプロ​​ジェクトの同じページで作業することはめったにありません」

私の経験では、この仮定は間違っています。特に、頻繁に使用される機能にはライブラリを使用することをお勧めします。ライブラリの重要なポイントは、再利用可能であるということです。したがって、定義上、ライブラリの作成者は「あなたの」ページで作業しています。

于 2012-05-02T17:35:41.120 に答える
1

開発者がプロ​​ジェクトの同じページで作業することはめったにありません

これは非常に真実ではありません。企業のウェブサイトを維持する過程で、何人かの開発者を簡単に雇って解雇することができ、彼ら全員があなたが作成した同じページで作業しなければならないかもしれません。

于 2012-05-02T17:35:54.250 に答える
1

開発者がプロ​​ジェクトの同じページで作業することはめったにありません。ユーザーがプロジェクトのページを変更すると、グローバル名前空間がクリアされると思います。

はい、グローバル名前空間はすべてのリクエストでクリアされますが、それがグローバル名前空間を汚染する理由にはなりません。あなたは同じ部屋で働いている開発者の小さなチームについて考えているようです。しかし、それでも、ある開発者がサードパーティのライブラリまたはウィジェットを使用することにした場合はどうなるでしょうか。そのウィジェットがグローバル名前空間を変更すると、現在のコードに干渉する可能性があります。そのため、ベストプラクティスは、グローバル名前空間に変数/関数を作成しないようにすることです。

于 2012-05-02T17:38:53.800 に答える
1

最初に-はい、ページがリロードされると、すべてのJavaScriptが再初期化されます。したがって、次の場合はwindow.foo、ページが読み込まれるたびに常に1つになります。

window.foo = 1;

alert(foo);

window.foo++;

2番目-チーム(またはプロジェクト)で名前空間を作成する1つの方法は、次のようになります。

var myCompany = {};

myCompany.Utils = {};

myCompany.Utils.doSomething = function() {
  alert("doSomething");
};

myCompany.Utils.doSomethingElse = function() {
  alert("doSomethingElse");
};

myCompany.Utils.doSomethingElse();

これは、開発チーム内の「衝突」を防ぐだけではありません。また、ページで参照されている別のサードパーティのJavaScriptと誤って「衝突」することからコードを分離します。

于 2012-05-02T17:40:56.337 に答える