以上是一个简单的实现,在不同的场景,可以做一些适当的变通,以做到因地制宜。 下面是一个模拟冒泡排序的动画,尝试着使用了一点点观察者模式,似乎还不错 复制代码 代码如下: 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 < len; x++) { for (var y = 0; y < len - x; y++) { if (compare(arr[y], arr[y + 1]) > 0) { proxy(arr, y, y + 1); } } } } } }