我试图通过以下方式迭代列表var names = new List();
:
var names = new List();
names.append('tom');
names.append('bob');
names.append('marshal');
names.append('Cartman');
names.append('Randy');
for(names.top(); names.currentPosition() < names.length(); names.next()) {
console.log(names.getElement()); // going on and on stuck at one index! infinite loop!!!
}
我正在获得一个无限循环,其中包含一个不变的列表索引。什么 可能会出错?
假设列表已使用append
方法填充了值。绝对不是空的。以下是List类的实现:
function List() {
this.dataStore = [];
this.listSize = 0;
this.position = 0;
}
List.prototype = {
clear: function() {
delete this.dataStore;
this.dataStore = [];
this.position = this.listSize = 0;
},
toString: function() {
return this.dataStore.join(' \n');
},
getElement: function() {
return this.dataStore[this.position];
},
append: function(el) {
this.dataStore[this.listSize++] = el;
},
top: function() {
this.position = 0;
},
bottom: function() {
this.position = this.listSize - 1;
},
prev: function() {
if(this.position > 0) {
this.position--;
}
},
next: function() {
if(this.position < this.listSize - 1) {
this.position++;
}
},
length: function() {
return this.listSize;
},
currentPosition: function() {
return this.position;
},
};
答案 0 :(得分:1)
您的next()
函数不会使this.position
值增加this.listSize - 1
,因此for循环的条件部分将始终评估为true
,因为您的{ {1}}始终小于currentPosition()
。
例如,您的length()
中包含1个元素。这是for循环值:
List
致电names.top() = 0
names.currentPosition() = 0
names.length() = 1
支票names.next()
。这可以重写:this.position < this.listSize - 1
。所以接下来不会增加0 < (1 - 1)
并且你的for循环无限运行。