2012-05-02 11 views
0

グローバル変数と関数を使ってグローバル名前空間を乱雑にする危険について読んでいます。javascriptのグローバル名前空間は完全なポストバックごとにクリアされますか?

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

私はできる限り最良のコードを書いていますが、上記の記述は私を混乱させます。

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

これは当てはまりませんか?

+0

私はこの質問のタイトルがこの問題をあまり説明していないことを示唆しています。実際の質問に対する答えは「はい」で、名前空間はクリアされます。しかし、この問題は、何らかの名前空間を使用する必要がある理由に関するものです。なぜなら、識別子の衝突(グローバルネームスペースの混乱)を得ることができるからです。 –

+0

私は必要性を理解しています。私が読んでいた記事は、私の心配でした。私は、グローバルな名前空間が同じドメイン内に生きているかもしれないことを著者が示唆していると思いました。(私はこれが真実だとは思わなかったが、それを確認したかった) –

答えて

1

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

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

+0

ありがとうございました!これは完璧な意味合いがあります。私は小規模なチームでしか働いていないので、よく知っている人たちが示唆していることをしたい。私は問題をより良く理解しようとしていただけです。 –

1

は、この仮定は私の経験では間違っている

「まれに、開発者は、プロジェクトの同じページで動作しません」。特に、頻繁に使用される機能にはライブラリを使用することをお勧めします。ライブラリの要点は、ライブラリが再利用可能であることです。したがって、定義上、図書館の著者はあなたのページで作業しています。まれ

+0

AH!私は私のページが参照する図書館に取り組んでいる開発者については考えていませんでした! –

+0

これは単なる例です。それでも、多くの開発者が私のページのコア機能を研究しています。 –

1

開発者は、これは非常に真実ではありませんプロジェクト

の同じページ上で動作します。企業のWebサイトを管理する過程で、いくつかの開発者は簡単に雇用され、解雇され、作成した同じページで作業する必要があります。

+0

多分私は、「開発者が同じページで作業することはまれである」と言っていたはずです。 –

1

最初に - ページがリロードされると、すべてのjavascriptが再初期化されます。あなたが持っていたのであれば、次のwindow.fooは、常にページがロードされる1たびに次のようになります。

window.foo = 1; 

alert(foo); 

window.foo++; 

セカンド - チーム(またはプロジェクト内)名前空間ができ1つのの方法は、このようなものです:

var myCompany = {}; 

myCompany.Utils = {}; 

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

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

myCompany.Utils.doSomethingElse(); 

これは、開発チーム内での「衝突」を防ぐだけでなく、また、あなたのコードがあなたのページで参照されている別のサードパーティ製のJavaScriptと「誤って」衝突するのを防ぎます。

関連する問題