了解JavaScript闭包

时间:2014-06-25 02:39:48

标签: javascript closures

我已经阅读了很多关于闭包的内容,并且大部分都了解了基本概念。也就是说,有人可以解释以下代码片段,只要创建闭包的位置以及返回函数和返回对象之间的区别。

    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);
                });
            }
        };
    };

0 个答案:

没有答案