经过仔细检查,发现是程序内有死循环。调试的方法就是简单的插入console.log。
// private method entry_expiry
Cache.prototype.entry_expiry = function Cache_entry_expiry(key) {
  var now = Date.now();
  var entry = this.T[key];
  if (now >= entry._expiry) {
    delete this.T[key];
  } else {
    setTimeout(this.entry_expiry.bind(this, key), entry._expiry - now);
  }
};
其中的var now = Date.now();之前不慎写成var now = Date.now;。
Date.now转换成数字是NaN,造成now >= entry._expiry永远是false。
而setTimeout(fn,NaN)等同于setTimeout(fn,0),导致程序死循环。