2016-11-01 2 views
0

this.dorequest()から返された後にグローバル変数となる 'key'にアクセスしたいとします。 ifブロック内にキーを取得しますが、外部のどこにでもアクセスすることはできません。誰かが助けてくれますか?確かにそれはスコープ/巻上げの問題です。前もって感謝します!Javascriptスコープ - スコープ外の値にアクセスできない

+0

が重複する可能性[私は非同期呼び出しからの応答を返すにはどうしますか?]( http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

答えて

3

。 varステートメントを削除するだけです。

さらに、console.logステートメントに到着する前に終了していない非同期呼び出しでキー変数を割り当てます。 console.logステートメントをコールバック関数に移動するか、コールバックが完了したときにconsole.logステートメントをトリガするイベントを作成します。

おそらく、非同期コールバック内でグローバルを使用することはお勧めできません。私はあなたのreturn文が何かをしているかどうかは確かではありませんが(使用しているライブラリのAPIに依存しますが)、キー変数を割り当てることはありません。

+0

私はそれを削除しました。しかし、ブロックの外側でreturn文を使用する必要がありますか? hello key undefined ポートでリスンするアプリケーション:8000 これは応答キーです。RES123 –

+1

別の問題があります。非同期呼び出し中に値を割り当てます。つまり、コンソールのログステートメントに入る前にコールが終了していない可能性があります。 console.logステートメントをコールバック関数に移動します。コールバックステートメントでグローバル変数を割り当てるのは良い考えではありません。なぜなら、いつ変化するのか分からないからです。それを楽しくするために、console.logステートメントを無限ループに入れることもできます。 –

0

window.keyをご利用ください。すべてのグローバルJavaScriptオブジェクト、関数、および変数は、自動的にウィンドウオブジェクトのメンバーになります。あなたはそれその範囲内で別の変数になりブロックスコープでそれを再定義する意味ブロックの内側

var key; 

を使用している

0

コードをクロージャーで囲むか、ウィンドウにキーを追加します。

つまり、window.key = undefined;

0

は重要な変数グローバル

すなわちwindow.key = undefined.

はまたresponse.body.keyの値をチェッククロージャ内のコードを追加したり、作るのどちらか

関連する問題