2010-12-06 13 views
14

整理を続けるために、最終的に1つの最終的なjavascriptファイルを形成するためにすべてが(最終的に)一緒に縮小されていますが、いくつかのjavascriptファイルがあります。私は(そのコードの間で)別々のファイルで物事を持っている場合、彼らはお互いへのアクセスを持っていないように思え

$(document).ready(function(){ 
    //some javascript here 
}); 

各ファイルの内容がに包まれています。これは範囲の問題ですか?私に何ができる?

たとえば、あるファイルでは、ajaxで受け取ったデータからテーブルを作成するコードがたくさんありました。しかし、ファイルの半分は、タイプなどに応じてデータを表示するためのテンプレートに過ぎませんでした。私は自分のファイルにテンプレートを持っていたいと思います。

私はこれがちょうど「好み」の問題であることを理解しています。

しかし、私はこれから学び、おそらくそれを「私のように」持つことを望んでいます。

答えて

26

Javascriptは機能スコープを使用するため、関数内のローカル変数は外部には見えません。このため、コードは他のスコープのコードにアクセスできません。

名前空間を作成するのが理想的です。それはあなたがプライベート&公共要素間の区別を行うことができますので、

var NS = {}; 

(function(){ 
    function privateFunction() { ... } 
    NS.publicFunction = function(){ ... } 
})(); 

$(document).ready(function(){ 
    NS.publicFunction(); 
}); 

にも役立ちパターンです。

+0

'privateFunctionAttempt = function(){/ * do something * /}'のような関数を宣言すると、実際にはグローバルスコープにあることに注意してください。したがって、 'console.log(window.privateFunctionAttempt)'を実行すると、 'console.log(window.privateFunction)'のようにundefinedを返すのではなく、関数が表示されます。 http://stackoverflow.com/questions/11819425/jquery-document-ready-and-function-scopeを参照してください。 –

1

これは範囲の問題です。たとえば:

function a() { 
    var myHiddenStr = 'abc'; 
} 
alert(typeof(myHiddenStr)); 

あなたは機能amyHiddenStr外にアクセスすることはできません。同様に、ドキュメント準備のために使用する無名関数は、その中のすべてを隠します。

異なるjsファイルのものを配置するグローバルスコープを持つことはお勧めできません。おそらく、document.readyハンドラを1つ持ち、そこからそれぞれの関数を呼び出すほうがよいでしょう。結果を関数から取得し、それらを使用する必要がある他の関数に渡すことができます。

関連する問題