我已经阅读了很多关于闭包的内容,并且大部分都了解了基本概念。也就是说,有人可以解释以下代码片段,只要创建闭包的位置以及返回函数和返回对象之间的区别。
return function () {
var topics = {};
return {
subscribe: function (topic, listener) {
if (listener && typeof (listener) === 'function') {
topics[topic] = topics[topic] || { queue: [] };
}
var index = topics[topic].queue.push(listener) - 1;
return (function (topic, index) {
return {
remove: function () {
delete topics[topic].queue[index];
}
}
})(topic, index);
},
publish: function (topic, info) {
if (!topics[topic] || !topics[topic].queue.length) return;
angular.forEach(topics[topic].queue, function (listener) {
listener.apply(this, info);
});
}
};
};