Javascript Array.length在数组上推送对象后读取0
我试图将对象推送到数组中,并将数组作为队列处理。当前没有从数组中删除任何内容,每次调用acme.addToValidateQueue函数(连续多次)时,它总是显示1作为数组长度。我做错了什么Javascript Array.length在数组上推送对象后读取0,javascript,Javascript,我试图将对象推送到数组中,并将数组作为队列处理。当前没有从数组中删除任何内容,每次调用acme.addToValidateQueue函数(连续多次)时,它总是显示1作为数组长度。我做错了什么 var acme = {}; acme.validateQueue = []; acme.validateQueueLastIndex = 0; acme.addToValidateQueue = function(fieldData,fieldName){ var queueItem = {
var acme = {};
acme.validateQueue = [];
acme.validateQueueLastIndex = 0;
acme.addToValidateQueue = function(fieldData,fieldName){
var queueItem = {
index : acme.validateQueueLastIndex,
fieldData : fieldData,
fieldName : fieldName
};
acme.validateQueue.push(queueItem);
acme.validateQueueLastIndex++;
console.log(acme.validateQueue.length); // shows 1 everytime the queue is called.
if(acme.validateQueue.length === 1){
acme.processValidateQueue();
};
}
acme.processValidateQueue = function(){
if(acme.validateQueue.length){
acme.validate_field(acme.validateQueue.shift());
}
}
每次调用
addToValidateQueue
,都会调用processValidateQueue
,这会立即删除您刚才添加的项目:
acme.validate_field(acme.validateQueue.shift());
// Right here ^
这意味着在下一次通话中,您只能看到您在该通话中添加的项目。旧项已不存在。您确定每次都没有使用新的
acme
和acme.validateQueue
执行此操作吗?您不应该在方法中使用此
而不是acme
,因此,该方法使用正在被调用的实例,而不是acme
变量?能否向我们展示对addToValidateQueue的调用?@user2357112它们在全局范围内声明为addToValidateQueue
异步回调?