Voici le code, quand je l'exécute il va en boucle infinie, des failles dans le code?Le code JS s'exécute en boucle infinie
function s4() {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
};
function guid() {
return [s4(), s4(), '-' , s4(), '-', s4(), '-', s4(), '-', s4(), s4(), s4()].join('');
}
function randomFromInterval(from,to){
return Math.floor(Math.random()*(to-from+1)+from);
}
function get_random_color() {
var letters = 'ABCDEF'.split('');
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.round(Math.random() * 15)];
}
return color;
}
var data = new Array(500), types = ["date", "slider", "select", "string", "number", "rating", "level", "title"],
allowModify = [true, false], str = "Cell";
for(var i = 0; i < 500; i++){
var arr = new Array(100);
for(var j = 0; j < 100; j++){
var obj = {};
obj.id = guid();
obj.role = types[randomFromInterval(0, 6)];
obj.selected = "";
obj.writable = allowModify[randomFromInterval(0, 1)];
switch(obj.role){
case "slider":
obj.range = [0, randomFromInterval(0, 100)];
obj.text = 0;
break;
case "select":
var num = randomFromInterval(2, 4), _options = Array(num);
for(var opt = 0; opt < num; opt += 1){
_options[opt] = {
id : guid(),
text : ["Option[", opt + 1, "]"].join('')
}
}
obj.options = _options;
obj.selected = _options[randomFromInterval(0, num - 1)];
obj.text = obj.selected.text;
obj.selected = obj.selected.id;
break;
case "date":
obj.text = [randomFromInterval(2000, 2013), randomFromInterval(1, 12), randomFromInterval(1, 25)].join('/');
break;
case "string":
obj.text = [str, "[", i , "][", j, "]"].join('');
break;
case "number":
obj.text = randomFromInterval(1, 176432);
break;
case "rating":
var _arr = [], colors = randomFromInterval(0, num - 1);
for(var i = 0; i < colors; i++){
_arr[i] = get_random_color();
}
obj.colors = _arr;
obj.text = _arr[1];
break;
case "level":
obj.text = randomFromInterval(0, 100);
obj.valid = {
"0-40" : get_random_color(),
"40-50" : get_random_color(),
"50-100" : get_random_color()
}
break;
}
arr[j] = obj;
}
data[i] = arr;
}
console.log(data);
Vous êtes sûr que c'est infini? Ces deux boucles massives et une instruction switch à l'intérieur pourraient causer des ralentissements. – tymeJV
Obtenez une copie de Firebug et parcourez le code dans le débogueur. C'est une méthode de débogage beaucoup plus efficace que de demander aux contributeurs de l'OS de deviner où se trouve l'erreur. –
@MikeW J'ai débogué le code et quand je vais pas à pas, il n'y a pas de problème pour les premières itérations 3-4. Mais après cela, il est frappé. Même pour 100 boucles, dans la question que j'ai mentionné 500. – Exception