Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 闭包与名称空间的相关性和使用_Javascript_Namespaces_Closures - Fatal编程技术网

Javascript 闭包与名称空间的相关性和使用

Javascript 闭包与名称空间的相关性和使用,javascript,namespaces,closures,Javascript,Namespaces,Closures,《关于闭包》中的答案指出闭包的重要性是“因为javascript没有像名称空间这样的功能,你可以很容易地处理所有类型的全局对象。”并将其描述为“词汇范围” 并且非常清楚地描述了名称空间和闭包之间的区别 所以我想知道,如果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
开始

停止
对不起,在您的示例中,我看不出在命名空间对象上公开
间隔
元素
增量
有什么问题。公开它们只会使它更容易破坏,更难理解。