写发布订阅的时候遇到了个问题。
我在调用crop.remove()的时候清空了fns 但是打印fns还是有数据的。fns.length = 0;这样是可以清除的。fns不是也指向了this.list[key]吗?
下方有打印结果
let crop = {
list: {},
on(key, fn) {
if(!this.list[key]) {
this.list[key] = [];
}
this.list[key].push(fn);
},
emit(key, ...payload) {
let fns = this.list[key];
if(!fns || fns.length === 0) return;
fns.forEach(fn => {
fn.apply(this, payload);
})
},
remove(key, fn) {
let fns = this.list[key];
console.log(key);
fns = [];
}
}
fns
指向this.list[key]
,但是fns = []
等同于将fns
指向了一个新的数组。类似于,