Javascript - 命名空间与闭包之间的区别
Javascript - difference between namespace vs. closure?
在Javascript中,命名空间和闭包有什么区别? 他们似乎与我非常相似。
编辑
具体来说,本文讨论了命名空间和闭包,并有这样的句子
现在,我们仍然会遇到想要声明的情况 自然不适合命名空间对象的变量 结构。但我们不希望这些变量具有全局范围。这是哪里 自调用函数进来了。
它继续给出看起来很像闭包的东西,作为"对象命名空间"。 在我看来,命名空间是一个闭包......但也许不是...?帮助?
命名空间本质上是一个没有有趣属性的Object
,因此您不会在作用域中运行一堆具有相似和/或冲突名称的变量。所以,例如,类似
MyNS = {}
MyNS.x = 2
MyNS.func = function() { return 7; }
闭包是指函数"保留"未在其中定义的变量的值,即使这些变量已超出范围。采取以下措施:
function makeCounter() {
var x = 0;
return function() { return x++; }
}
如果我放c = makeCounter()
,然后反复打电话给c()
,我会得到0, 1, 2, 3, ...
。这是因为makeCounter
定义的内部匿名函数的作用域在x
上"关闭",所以即使x
超出范围,它也有对它的引用。
值得注意的是,如果我然后做d = makeCounter()
,d()
将从 0 开始计数。这是因为c
和d
得到不同的x
实例。
通常是一种将所有全局变量作为属性放在一个主全局变量下的方法,因此只添加一个新的真正顶级全局变量。 它可以防止污染全局命名空间,并减少与其他全局变量发生冲突的机会。
命名空间的示例:
var YUI = {};
YUI.one = function(sel) {...};
YUI.two = function(sel) {...};
YUI.three = function(sel) {...};
顶级全局命名空间YUI
中有一个新项,但有多个通过 YUI 命名空间对象全局可访问的项。
闭包是一个功能块,由于对函数内部部分的持久引用,其持续时间超过函数执行的正常完成。
function doSometing() {
var x = 10;
setTimer(function() {
// this gets called after doSomething() has finished executing
// but because of the function closure, the variables
// inside of the parent scope like x are still accessible
x += 10;
}, 1000);
}
从 http://jibbering.com/faq/notes/closures/:
闭包是通过从该函数调用返回在函数调用的执行上下文中创建的函数对象并将对该内部函数的引用分配给另一个对象的属性而形成的。或者,通过直接将对此类函数对象的引用分配给全局变量、全局可访问对象的属性或通过引用作为参数传递给外部函数调用的对象。
命名空间只是一个约定,创建的对象是为了避免变量使全局范围混乱。
- 全局变量和全局对象的属性之间有什么区别吗
- JavaScript中的函数和对象之间没有区别吗?
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- javascript函数的:和=之间的区别
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 函数中this和var之间的区别
- “util.inherits”和在NodeJS中扩展原型之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- webpack开发模式和生产构建模式之间有什么区别
- servlet和代理servlet之间的区别
- Javascript 类型未定义和 void 之间的区别
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 布局引擎和javascript引擎之间的区别
- 什么's extjs中的mon()和on()之间的区别
- type=text/javascript和language=javascript之间的区别
- 函数()和新函数()之间的区别
- JavaScript中let和var之间的区别
- 蓝鸟的done()和spread()之间的区别
- Node.js HTTP/NET——连接和请求之间的区别