我正在尝试在迭代数组X
时将元素推送到数组Y
。在某些时候,在将新元素推入数组X时,我在浏览器控制台中收到“意外的令牌:”错误。我可以在它失败之前正确地推送几个元素(几乎每次都是第7个元素)。
它是递归函数,可能会导致问题......这是代码:
function getPosition(img) {
var tmpRandPosition = Math.floor(Math.random() * (9));
if($.inArray(galleryPositions[tmpRandPosition], populatedPositions) != -1) {
setTimeout("getPosition("+img+")",1);
} else {
populatedPositions.push(galleryPositions[tmpRandPosition]);
return true;
}
}
从脚本中可以看出,我正试图在HTML中的8个不同位置的元素中随机显示照片。
答案 0 :(得分:3)
似乎问题出在setTimeout
函数中。尝试使用匿名函数而不是连接将参数传递给该函数:
setTimeout(function() { getPosition(img) }, 1);
答案 1 :(得分:2)
这会破坏:
setTimeout("getPosition("+img+")",1);
实际写道:
setTimeout("getPosition(img_path.jpg)",1);
并尝试对其进行评估(使用eval
)。
问题在于JS将img_path.jpg
视为变量。
修正:
setTimeout("getPosition('"+img+"')",1);
但是从来没有这样做,因为评估字符串不好或不快。
向setTimeout发送匿名函数:
<强> REALFIX:强>
setTimeout(function() {
getPosition(img);
}, 1);
答案 2 :(得分:1)
Don't call setTimeout with a string argument.始终使用功能。在这种情况下使用字符串如果img变量易受攻击,则将此代码置于注入攻击中。