发布于 2014-11-21 20:20:29
JavaScript没有传统意义上的名称空间。这只是一个术语,用来描述在对象结构中组织库的功能。
闭包很有用,因为库通常希望将状态存储在变量中,而不需要将这些变量公开给任何其他代码。
如果该数据是在命名空间对象上公开的,那么库的用户将更难判断哪些属性是设计用于交互的,哪些是仅供内部使用的。
例如,考虑:
var example_namespace = (function() {
var interval;
var element;
function start() {
if (interval) {
return;
}
if (!element) {
element = document.querySelector('span');
}
interval = setInterval(increment, 500);
}
function stop() {
clearInterval(interval);
interval = null;
}
function increment() {
element.innerHTML++;
}
return {
counter: {
start: start,
stop: stop
}
};
}());
addEventListener('load', function() {
document.querySelector('#start').addEventListener('click', example_namespace.counter.start);
document.querySelector('#stop').addEventListener('click', example_namespace.counter.stop);
});Count:
<span>0</span>
<button type="button" id="start">start</button>
<button type="button" id="stop">stop</button>
如果不使用闭包,interval、element和increment都将在命名空间对象或全局上公开。
https://stackoverflow.com/questions/27069332
复制相似问题