这段javascript代码是什么意思?望通俗易懂的解释
Queue=function(){this.queue=[];this.queueSpace=0;Queue.prototype.Dequeue=function(){v...
Queue = function()
{
this.queue = [];
this.queueSpace = 0;
Queue.prototype.Dequeue = function()
{
var element = undefined;
if (this.queue.length)
{
element = this.queue[this.queueSpace];
if (++this.queueSpace * 2 >= this.queue.length)//?????
{
this.queue = this.queue.slice(this.queueSpace);
this.queueSpace=0;
}
}
return element;
}
}
主要就是这段不懂:
if (++this.queueSpace * 2 >= this.queue.length)//为什么不直接用if (2>= this.queue.length)????
{
this.queue = this.queue.slice(this.queueSpace);//为什么不直接用this.queue = this.queue.slice(1);
this.queueSpace=0
}//它这个queueSpac到底代表队列的什么意思?? 展开
{
this.queue = [];
this.queueSpace = 0;
Queue.prototype.Dequeue = function()
{
var element = undefined;
if (this.queue.length)
{
element = this.queue[this.queueSpace];
if (++this.queueSpace * 2 >= this.queue.length)//?????
{
this.queue = this.queue.slice(this.queueSpace);
this.queueSpace=0;
}
}
return element;
}
}
主要就是这段不懂:
if (++this.queueSpace * 2 >= this.queue.length)//为什么不直接用if (2>= this.queue.length)????
{
this.queue = this.queue.slice(this.queueSpace);//为什么不直接用this.queue = this.queue.slice(1);
this.queueSpace=0
}//它这个queueSpac到底代表队列的什么意思?? 展开
5个回答
展开全部
pur_e 10:52:49
this.queueSpace
这个就是数组被出队列的元素数
队列不是先进先出吗
rgaofei 10:54:42
嗯
pur_e 10:53:34
先进的在数组前面
所以出队列时用element = this.queue[this.queueSpace]
然后++this.queueSpace把这个标志往后移一位
rgaofei 10:56:07
对对
pur_e 10:54:55
他做了一个优化,当被删除队列元素到了队列一半的时候
rgaofei 10:56:13
对对
pur_e 10:55:09
也就是++this.queueSpace * 2 >= this.queue.length
rgaofei 10:56:41
对,就这里
pur_e 10:55:20
重新建一个数组
this.queue = this.queue.slice(this.queueSpace);
这个数组从this.queueSpace开始到队列尾
就是所有的有效元素
同时标志清0 this.queueSpace=0;
rgaofei 10:57:49
为什么要重新建一个数组呢?
pur_e 10:56:48
原来数组变大了
rgaofei 10:58:05
为什么要重新建一个数组呢?
为什么要重新建一个数组呢?
pur_e 10:56:59
无效元素超过一半了
随便,不新建也可以
this.queueSpace
这个就是数组被出队列的元素数
队列不是先进先出吗
rgaofei 10:54:42
嗯
pur_e 10:53:34
先进的在数组前面
所以出队列时用element = this.queue[this.queueSpace]
然后++this.queueSpace把这个标志往后移一位
rgaofei 10:56:07
对对
pur_e 10:54:55
他做了一个优化,当被删除队列元素到了队列一半的时候
rgaofei 10:56:13
对对
pur_e 10:55:09
也就是++this.queueSpace * 2 >= this.queue.length
rgaofei 10:56:41
对,就这里
pur_e 10:55:20
重新建一个数组
this.queue = this.queue.slice(this.queueSpace);
这个数组从this.queueSpace开始到队列尾
就是所有的有效元素
同时标志清0 this.queueSpace=0;
rgaofei 10:57:49
为什么要重新建一个数组呢?
pur_e 10:56:48
原来数组变大了
rgaofei 10:58:05
为什么要重新建一个数组呢?
为什么要重新建一个数组呢?
pur_e 10:56:59
无效元素超过一半了
随便,不新建也可以
展开全部
if (++this.queueSpace * 2 >= this.queue.length)//为什么不直接用if (2>= this.queue.length)????
的原因是:对象Queue 的Dequeue 方法,在对象构建以后调用的次数,不仅仅只有一次,比如说在初始化的时候 this.queue的长度为10(注意是长度,this.queue.length)
this.queueSpace 的值是0;
这时调用Dequeue 方法,语句 ++this.queueSpace * 2 >= this.queue.length
执行的顺序,对this.queueSpace进行自增操作(这是this.this.queueSpace的值为1),然后*2再与this.queue.length比较,所以很明显 2肯定小于10,条件不成立,所以不会走if里面的语句。
当再次执行Dequeue 函数时,这时的this.queueSpace 就和初始化时不同了,这时应该为1,然后再进行自增操作这是this.queueSpace 的值为2.
如果还有不明白请 Hi me
的原因是:对象Queue 的Dequeue 方法,在对象构建以后调用的次数,不仅仅只有一次,比如说在初始化的时候 this.queue的长度为10(注意是长度,this.queue.length)
this.queueSpace 的值是0;
这时调用Dequeue 方法,语句 ++this.queueSpace * 2 >= this.queue.length
执行的顺序,对this.queueSpace进行自增操作(这是this.this.queueSpace的值为1),然后*2再与this.queue.length比较,所以很明显 2肯定小于10,条件不成立,所以不会走if里面的语句。
当再次执行Dequeue 函数时,这时的this.queueSpace 就和初始化时不同了,这时应该为1,然后再进行自增操作这是this.queueSpace 的值为2.
如果还有不明白请 Hi me
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<script>
Queue = function()
{
this.queue = [];
this.ix=0;
this.queueSpace = 0;
}
Queue.prototype.Dequeue = function()
{
var element = undefined;
if (this.queue.length)
{
element = this.queue[this.queueSpace];
if (++this.queueSpace * 2 >= this.queue.length)//?????
{
this.queue = this.queue.slice(this.queueSpace);
this.queueSpace=0;
}
}
document.write("<b>call for <span style='color:Red'>"+ ++this.ix+"</span> times:</b> ");
document.write("<b>queue:</b><span style='color:Red'>"+this.queue.join()+"</span>");
document.write(" ");
document.write("<b>element</b>: <span style='color:Red'>"+element+"</span>");
document.write(" ");
document.write("<b>queueSpace</b>:<span style='color:Red'>"+this.queueSpace+"</span>");
document.write("<br/>");
return element;
}
queue=new Queue();
queue.queue=[0,1,2,3,4,5,6,7,8,9];
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
</script>
运行下这个你就知道怎么回事了,每次执行Dequeue这个方法的时候queueSpace的值都会变的(自增)。另外这个代码中怎么把Queue.prototype.Dequeue的定义写到Queue类里面去了?这样每次初始化一个新的Queue实例的时候都会重新定义Dequeue方法的。应该写到外面才对。
Queue = function()
{
this.queue = [];
this.ix=0;
this.queueSpace = 0;
}
Queue.prototype.Dequeue = function()
{
var element = undefined;
if (this.queue.length)
{
element = this.queue[this.queueSpace];
if (++this.queueSpace * 2 >= this.queue.length)//?????
{
this.queue = this.queue.slice(this.queueSpace);
this.queueSpace=0;
}
}
document.write("<b>call for <span style='color:Red'>"+ ++this.ix+"</span> times:</b> ");
document.write("<b>queue:</b><span style='color:Red'>"+this.queue.join()+"</span>");
document.write(" ");
document.write("<b>element</b>: <span style='color:Red'>"+element+"</span>");
document.write(" ");
document.write("<b>queueSpace</b>:<span style='color:Red'>"+this.queueSpace+"</span>");
document.write("<br/>");
return element;
}
queue=new Queue();
queue.queue=[0,1,2,3,4,5,6,7,8,9];
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
</script>
运行下这个你就知道怎么回事了,每次执行Dequeue这个方法的时候queueSpace的值都会变的(自增)。另外这个代码中怎么把Queue.prototype.Dequeue的定义写到Queue类里面去了?这样每次初始化一个新的Queue实例的时候都会重新定义Dequeue方法的。应该写到外面才对。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个代码不全吧?
怎么没有 enqueue 的方法呢?
queueSpace 似乎是 position 的意思。
怎么没有 enqueue 的方法呢?
queueSpace 似乎是 position 的意思。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义一个类,里面定义几个属性。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询