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