而在某些場景中,隊列確實像一支奇兵,可以帶來不錯的效果,例如配合定時器使用,可以模擬時間差效果
function createDq(){
var dq = [], size = 0;
return {
setDqueq:function(queue ){
dq = queue;
size = queue.length;
},
queue:function(fn){
size ;
dq.push(fnfn); },
dqueue:function(){
size --;
return dq.shift();
},
run:function(fn){
var me = this, timer;
timer = setInterval(function(){
if(size clearInterval(timer);
}
fn.call(null,me.dqueue ());
},30);
}
}
}
以上是一個簡單的實現,在不同的場景,可以做一些適當的變通,以做到因地制宜。
下面是一個模擬冒泡排序的動畫,嘗試著使用了一點點觀察者模式,似乎還不錯
function bubble(){
var obs = [];
function compare(x, y) {
return x.w - y.w; }
function swap(a, i, j) {
var t = a[i]; a[i] = a[j]; a[j] = t;
}
function proxy(a, i, j){
notify(a[i].id "-" a[j].id);
swap.apply(null,arguments);
}
function notify(arg){
obs[0].m.call(obs[0],arg);
}
return {
addOb:function(ob){
obs. push(ob);
},
sort:function(arr){
var len = arr.length;
for (var x = 1; x for (var y = 0; y if (compare(arr[y], arr[y 1]) > 0) {
proxy(arr, y, y 1) ;
}
}
}
}
}
}