2011-01-23 6 views
1

クイック質問:初心者の質問次の例ではjQueryの範囲に関する

$(function(){ 
    var test; 
    $.get('txtfile.txt', function(txtfile) { 
     test = txtfile.split('\n'); 
    }); 
    console.log(test); 
}); 

コンソールに戻り「テスト」は未定義です。私が間違っているところを教えてください。おかげさまで

+0

jQueryには独自のスコープがありません.Javascriptライブラリです。 –

+0

:)それはjqueryの直接スコープではなく、むしろjquery構造体で失われてしまったという事実... – uhandoh

答えて

3

$.getは、非同期で動作します(「Ajax」の「A」は「非同期」を表します)。成功コールバック(function(){}構造体を使用して定義している)は、Ajax呼び出しの終了後にのみコールされます。コードが

に到着したとき
console.log(test); 

まだ起こっていない。

console.logコールを成功コールバックに入れると、正常に動作します。

+0

$ .getによってアクセスされるデータと関係しているすべてが成功のコールバックの中になければなりませんか? – uhandoh

+1

@uhandoh:はい、成功のコールバックはすべての作業を行う必要があります。しかし成功のコールバックは、必要な関数やメソッドを自由に呼び出すことができます。成功コールバックは、他のクロージャと同じようにサラウンドスコープ内のものにもアクセスできます。 –