【发布时间】:2014-01-05 09:12:24
【问题描述】:
我知道这里已经有很多关于命名空间的话题。我也读了很多。我仍然有点不确定,而是对命名空间和闭包有点搞砸了。 我还为我的线程带来了一些特定的代码。
以下是命名空间:
var Interface = (function(){
return {
name: value,
name: function( ... ) {
}
}; })();
//interface.call(); >> to call the namespace (I did not get where yet, but this is another story I think)
还有:
var Interface = (function(){
function a(){
}
return {
name: a
}; })();
好的,阅读了许多主题和网站,我注意到的第一件事是: - Javascript 中没有命名空间,由于某些原因,它们被跳过了。 - 关闭似乎几乎相同,至少,我仍然缺乏了解差异的知识。例如,这是一个应该是闭包的函数:
var Counter = (function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
}
})();
问题:
1) 命名空间和闭包是否相同,并且可能只是处于不同的“定义”级别,例如: 闭包(“方法”)是如何在 Javascript 中实现命名空间(一个概念)?
2) 在上述命名空间中:我可以通过以下方式访问function a 吗?
Interface.name()
3) 如果有一个带参数的函数,这个命名空间将如何工作?
var Interface = (function(){
function a(p1, p2){
}
return {
name: a
}; })();
这怎么叫? (注意我插入了p1 和p2)。
4) 命名空间是(一个!)命名空间吗 或者命名空间也可能是一个可以包含命名空间的命名空间(就像文件夹可以有文件夹一样)?
【问题讨论】:
标签: javascript namespaces closures difference