2014-09-28 171 views
5

我決定搞亂jquery,製作一個簡單的基於軸測圖的遊戲。它呈現一些地圖,然後在堆棧中出現問題。 (超過最大調用堆棧大小) 我現在只是使用背景顏色作爲瓷磚。爲什麼這個循環會導致堆棧溢出?

JS Bin Here

var map = [ 
    "g","g","g","s","s", 
    "g","g","s","s","w", 
    "g","g","s","w","w", 
    "g","g","s","w","w", 
    "g","g","s","w","w" 
]; 
var x = 0; 
var y = 0; 
var count = 0; 
var background; 
function init() { $.each(map, function(key, value) { 

    x += 30; 
    y += 60; 
    if (count > 4){ 
    x -= 120; 
    y -= 360; 
    count = 0; 
    } 
    if (value == "g"){background = "#00ff00";} 
    if (value == "w"){background = "#0000ff";} 
    if (value == "s"){background = "#ffff00";} 

    $('.map_piece').clone().appendTo('body').css({'top' : x + 'px', 'left' : y + 'px','display' : 'block','background' : background}); 
     count ++; 
}); 
       } 

$('document').ready(function(){ 
init(); 

}); 

回答

5

在每次迭代k中,您會克隆2^k個項目。

相反克隆的元素,它可能只是更容易在每次創建新的元素:

$('<div class="map_piece">') 
    .appendTo('body') 
    .css({'top' : x + 'px', 'left' : y + 'px','display' : 'block','background' : background}); 
+0

非常感謝您的糾正和原因。我對克隆不太熟悉,我沒有意識到我克隆了每一個實例。這兩個答案都很有幫助,但是由於你先回答2分鐘......你會得到複選標記! :) – 2014-09-28 04:49:55

4

調用$('.map_piece').clone()克隆已創建迄今所有作品。每次循環運行時,這會導致克隆元素數量呈指數級增長。要執行您打算執行的操作,請使用first()將克隆限制爲僅一個元素。

$('.map_piece').first().clone().appendTo('body').css({'top' : x + 'px', 'left' : y + 'px','display' : 'block','background' : background}); 
+0

最多的一票!感謝您向我展示first()!我看到了兩種方法,並會嘗試記住它們。 – 2014-09-28 04:50:50

相關問題