2016-12-10 8 views
-3

私は、関数の外の変数にアクセスしようとしているが、私はニックネームにアクセスするにはどうすればよい未定義アクセス変数の後に関数の中にそれを定義

meliObject.get('users/me', function (err, res) { 
      nickname = res.nickname; 
    }); 

console.log(nickname); 

を取得していますか?

EDIT

私はのために私のコードを変更:

var nickname; 

     meliObject.get('users/me', function (err, res) { 

      nickname = res.nickname; 


     }); 

     console.log(nickname); 

しかし、私はまだその関数の結果は非同期ですので、あなたはこれを行うことはできません未定義

+0

この質問は、コールバックの開始です。ようこそ! – 4castle

+2

@NickA - いいえ。その変数はグローバルです。これはスコープではなく時間です。 – Quentin

答えて

1

を取得しています。 Javascriptの流れは次のようになります。meliObject.getを実行し、すぐに戻り、console.log(ニックネーム)を実行して、コールバックが呼び出されるのを待ちます。適切にconsole.logするには、ちょうどこの操作を行います。関数の外で変数を宣言するために、ちょうどVARを使用する/しましょう/ constの、あなたの質問に答えるために、今すぐ

meliObject.get('users/me', function (err, res) { 
    nickname = res.nickname; 
    console.log(nickname); 
}); 

を:

var a = 2; 
(function() { 
    a = 3; 
})(); 
console.log(a); 

それが印刷されます予想通り。

+0

質問でコードを変更しましたが、私は定義されていません –

+0

これは私が記述した最初の問題のためです。あなたのエラーは範囲ではなく、実際には非同期であった。コールバック関数の中にconsole.logを入れる必要があります.JSが実行する順序です(詳細は最初の段落を参照してください) –

関連する問題