为什么这个循环导致堆栈溢出?

时间:2014-09-28 04:31:30

标签: jquery

我决定乱用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(); 

});

2 个答案:

答案 0 :(得分:5)

在每次迭代k中,你克隆2 ^ k项。

不是克隆元素,每次创建新元素可能更容易:

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

答案 1 :(得分:4)

调用$('.map_piece').clone()克隆到目前为止已创建的所有片段。每次循环运行时,这会导致克隆元素数量呈指数增长。要执行您打算执行的操作,请使用first()将克隆限制为仅一个元素。

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