2017-10-11 3 views
0

undefinedが私のコンソールに表示される理由はわかりません。私はスコープ変数について読んで、スコープ外の変数を定義すると、その変数を特定の関数スコープ外にアクセス可能にする必要があることを知ります。 ない私がここで間違ってやっていることを確認:マイコンソールは、それが値を割り当てられている前に、あなたがlocをログに記録されているbeacuseつまりundefined未定義の値、可変スコープの問題

+1

'location'は' window'のグローバル変数です。これは 'window.location'または単に' location'でアクセスすることができます。 – JohnnyCoder

答えて

1

をログに記録され

const history = createHistory(); 
const location = history.location; 
let loc; 
const listen = history.listen((location) => { 
    loc = `${location.search}${location.hash}`; 
    return loc; 
}) 
console.log(loc); 

。値がundefinedになるように初期化されます。 listenに渡されたコールバックが呼び出されたときに値が割り当てられます。私はあなたが本当にそれを返すか、あなたの質問に説明する方法を使用することはできません。この文脈でそうlistenは、asynchronusであることを前提としてい

const history = createHistory(); 
const location = history.location; 
let loc; 
const listen = history.listen((location) => { 
    loc = `${location.search}${location.hash}`; 
    console.log(loc); 
}) 

:あなたがあなたのコードを変更する必要があり、正しい値をログに記録します。しかし、いったんlistenコールバックにいれば、その値を他のコールバックに渡すことができます。詳細な説明と例は、How do I return the response from an asynchronous call?を参照してください。

+0

お返事ありがとうございます!ここでの問題は、 'listen'関数の外側で' loc'を使いたいということです。現在、私は単純化のためにconsole.logしか持っていません。しかし、私がしたいのは、 'listen'の中で' log'に値を代入すれば、リストの外側に 'loc'をその値で使いたいということです。それは可能ですか? – vanegeek

0

console.log(loc);の時点で、その変数は定義されていません。この機能として

(location) => { loc = `${location.search}${location.hash}`; } 

はそれの後に実行されます。

0

location.listenメソッドは、場所が変更されたときにのみ呼び出されるという問題があります。 history.listen(...)呼び出しは、履歴が変更されたときに呼び出されるコードを宣言しますが、その時点でそのコードはまだ実行されていません。ここで擬似コードで

は、あなたが指示したものである:

  • 歴史はまだ(の値をプリントアウト
  • を変更したときに実行されるいくつかのコードを登録し、いくつかの定数と変数
  • を宣言コンソールに初期化されていない)変数

これは、あなたが何を意味するかに近いかもしれません:

const history = createHistory(); 
const location = history.location; 
let loc; 

const listen = history.listen((location) => { 
    loc = `${location.search}${location.hash}`; 
    console.log(loc); 
}) 
0

残りの部分は、locの位置を変更するまで変数に値が割り当てられないため、リッスン方法が実行されます。それまでは、その値はundefinedになります。また、変数を持っていて、コードの上に宣言したときに返される値がlocになるのはなぜですか?

関連する問題