2016-03-31 32 views
1

次のJavaScriptコードを実行しようとしていますが、エラーが発生しています。未知ReferenceError:getDetailsが定義されていません

var services = [{place_id:'okkkkkk'}]; 
var delay = 100; 
var nextAddress = 0; 

function theNext() { 
    if (nextAddress < services.length) { 
    setTimeout('getDetails("' + services[nextAddress].place_id + '", theNext)', delay); 
    nextAddress++; 
    } else { 

    } 
} 


function getDetails(address, next) { 
    alert('ok'); 
} 


theNext(); 

Errror:

VM687:1 Uncaught ReferenceError: getDetails is not defined

関数が定義されており、私が問題を引き起こしていただきましたわからないんだけどさ。

https://jsfiddle.net/qmnaykqw/

+0

私のコンソールでも同じ状況がテストされていますが、正常に動作しています。 –

+0

うわー!!私は誰が答えを下降させているか分からない! – user1012181

+0

Quentinは+ timed関数に 'nextAddress ++;'を置く必要があります。カウンタはすぐに増加し、timed関数が実行された時点で '1 'になります。 – Teemu

答えて

3

あなたはsetTimeoutに文字列を渡すと、それが評価されますグローバルスコープではonloadと呼ばれる別の関数(少なくともあなたのJSFiddleリンク上)で定義されているので、文字列が評価されるときに範囲外です。

代わりに関数をsetTimeoutに渡す必要があります。それはクロージャを作成し、スコープを保持します。

function delayed_function() { 
    getDetails(services[nextAddress].place_id, theNext); 
} 

setTimeout(delayed_function, delay); 
+0

ここでスクリプトを見ることができます:http://acleach.me.uk/gmaps/v3/plotaddresses.htmそれは男がそれを働かせるように見えます:/ – user1012181

+0

@ user1012181 - あなたのJSFiddleバージョンとは異なり、そのコードはロードイベントハンドラとして割り当てられる別の関数にコードをラップします。 – Quentin

+0

申し訳ありませんが、私はそれを取得していません。そのコードで説明できますか? :/ – user1012181

関連する問題