subscribe函数实现
这一节我们将学习subscribe函数是如何运作的
1、ensureCanMutateNextListeners
ensureCanMutateNextListeners函数是用来确保nextListeners和currentListeners相等的
代码:
function ensureCanMutateNextListeners() {
if (nextListeners === currentListeners) {
nextListeners = currentListeners.slice();
}
}
2、subscribe函数
subscribe函数作用就是将我们的监听函数push到nextListeners数组中,并将它设置为已监听状态
代码:
function subscribe(listener) {
if (typeof listener !== 'function') {
throw new Error('Expected listener to be a function.');
}
//设置为已监听状态
var isSubscribed = true;
ensureCanMutateNextListeners();
nextListeners.push(listener);
return function unsubscribe() {
//...
}
3、unsubscribe函数
unsubscribe函数和subscribe相反,它是将已监听状态的监听函数移出nextListeners数组
代码:
function unsubscribe() {
if (!isSubscribed) {
return;
}
isSubscribed = false;
ensureCanMutateNextListeners();
var index = nextListeners.indexOf(listener);
nextListeners.splice(index, 1);
}
大家可能也发现了,在这里并没有提到我们的listener函数会在什么时候在哪里运行,下一节将具体介绍