Javascript 闭包与名称空间的相关性和使用
《关于闭包》中的答案指出闭包的重要性是“因为javascript没有像名称空间这样的功能,你可以很容易地处理所有类型的全局对象。”并将其描述为“词汇范围” 并且非常清楚地描述了名称空间和闭包之间的区别Javascript 闭包与名称空间的相关性和使用,javascript,namespaces,closures,Javascript,Namespaces,Closures,《关于闭包》中的答案指出闭包的重要性是“因为javascript没有像名称空间这样的功能,你可以很容易地处理所有类型的全局对象。”并将其描述为“词汇范围” 并且非常清楚地描述了名称空间和闭包之间的区别 所以我想知道,如果Javascript真的有我常用的名称空间,那么现在闭包的用途是什么?当我可以通过名称空间组织和使用变量时,我不认为有必要使用闭包词法范围来关闭变量。JavaScript没有传统意义上的名称空间。这只是一个用来描述在对象结构中组织库功能的术语 闭包很有用,因为库通常希望将状态存储
所以我想知道,如果Javascript真的有我常用的名称空间,那么现在闭包的用途是什么?当我可以通过名称空间组织和使用变量时,我不认为有必要使用闭包词法范围来关闭变量。JavaScript没有传统意义上的名称空间。这只是一个用来描述在对象结构中组织库功能的术语 闭包很有用,因为库通常希望将状态存储在变量中,而无需将这些变量公开给任何其他代码 如果该数据是在名称空间对象上公开的,那么库的用户就很难判断哪些属性是设计用来与之交互的,哪些是仅供内部使用的 例如,考虑:
var示例_名称空间=(函数(){
var区间;
var元素;
函数start(){
如果(间隔){
返回;
}
if(!元素){
元素=document.querySelector('span');
}
间隔=设置间隔(增量,500);
}
函数停止(){
间隔时间;
间隔=空;
}
函数增量(){
element.innerHTML++;
}
返回{
柜台:{
开始:开始,
停:停
}
};
}());
addEventListener('load',function(){
document.querySelector(“#start”).addEventListener('click',示例_namespace.counter.start);
document.querySelector(“#stop”).addEventListener('click',示例_namespace.counter.stop);
});代码>
计数:
0
开始
停止
对不起,在您的示例中,我看不出在命名空间对象上公开间隔
、元素
和增量
有什么问题。公开它们只会使它更容易破坏,更难理解。