经过仔细检查,发现是程序内有死循环。调试的方法就是简单的插入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),导致程序死循环。