2012-10-25 52 views
0

請給我一些線索,這個JavaScript問題。 我有一個全局變量標記。並嘗試將每個標記推向標記。 但問題是,推到標記後。我試圖提醒內部函數和外部函數的值。結果是完全不同的。函數中的標記給我一些標記,但外面的標記保持空白。爲什麼我有不同的標記全局變量值?Javascript全局變量只更新匿名函數內

這是我的代碼片段:

for (var i = 0; i < netotal; i++) { 
    setTimeout(function() { 
     marker = new google.maps.Marker({ 
          position: pos[iterator], 
       map: map, 
       draggable: false, 
       animation: google.maps.Animation.DROP, 
       icon: neicon   
     }); 
     iterator++; 
     markers.push(marker);console.log(markers); 
    }, i * 50);  
} 

alert (markers); 

感謝您的熱心幫助或線索。

+0

裏面你的問題,你聲明函數內部的警告是「標誌」和外面的功能在「標記」上。也許有些打字錯誤? 此外,它也有助於共享其他代碼。我看不出什麼時候警報會被觸發,這是知道這裏至關重要的事情。緊接在for循環之後觸發警報嗎?然後這些標記確實是空的,因爲當延遲的函數執行時它將被填充。 – rmoorman

+0

@rmoorman,yap我犯了一些輸入錯誤。我在片段中添加了一些行。控制檯結果和警報是不同的。 – syant

+0

然後它是由事實引起的,即標記將在稍後填充(由於setTimeout)。你的編輯也清楚了。你可以通過用類似 的setTimeout(function(){console.log(markers);},netotal * 50)替換alert來確認。 – rmoorman

回答

1

您在使用setTimeout調用的函數中推送到markers,因此推遲不會發生,直到稍後。但是在任何超時發生之前,您立即打電話給alert(markers)。所以當時陣列是空的。

UPDATE:

要查看markers最後的內容,你需要另一個setTimeout

setTimeout(function() { alert(markers); }, netotal*50); 
+0

啊我看到,所以如何運行下一個腳本後加載所有的標記? – syant

+0

也許使用另一個'setTimeout'具有更高的超時。如果 – Barmar

+0

將其設置爲0,但我的標記[0]在函數外部仍未定義 – syant

1

取決於範圍,要訪問全局標記使用window.markers

+0

試圖更新到window.markers.push(標記)沒有幫助:( – syant