【发布时间】:2013-02-22 07:44:55
【问题描述】:
当使用 Javascript 闭包时,使用 Object literal Vs Constructor based objects 有什么不同吗?
是否只有语法差异或闭包还有其他差异? 任何解释这两个差异的例子都会很有帮助。
【问题讨论】:
标签: javascript jquery closures scope
当使用 Javascript 闭包时,使用 Object literal Vs Constructor based objects 有什么不同吗?
是否只有语法差异或闭包还有其他差异? 任何解释这两个差异的例子都会很有帮助。
【问题讨论】:
标签: javascript jquery closures scope
闭包是函数式编程的一个特性。它们与对象或对象字面量无关。
阅读以下答案 - 它很好地解释了闭包:https://stackoverflow.com/a/12931785/783743
一般来说,闭包是一个函数,它关闭嵌套函数中的变量,该函数移出闭包的范围。例如:
function getCounter() {
var count = 0;
return function counter() {
return ++count;
};
}
var counter = getCounter();
counter(); // 1
counter(); // 2
counter(); // 3
这里的函数getCounter变成了一个闭包,因为它关闭当嵌套函数返回时嵌套函数counter中使用的变量count(移出@的范围) 987654326@).
封闭的变量(在本例中为count)称为upvalue。闭包很重要,因为它们允许超出范围(被垃圾收集)的值保持活动状态。这在 C/C++ 和 Java 等语言中是不可能的。
【讨论】:
闭包更多的是关于变量的函数范围。所以重要的是要知道变量的作用域是定义它的函数。在这个作用域内运行的任何函数都可以访问它的 parent 函数本身。父函数将无权访问 child 函数变量,因为它超出了该子函数的范围。
因此,对象字面量中的变量将被限定为包含它的函数。 (如果它不在函数中,那么它在 global 范围内)。构造函数是一个函数,因此它定义的任何变量都在其自身范围内且在外部不可访问。构造函数中的任何内部方法都可以访问这些已定义的变量。
当函数可以访问其自身范围之外的变量并且该变量可能被其他东西更改或更改时,会创建闭包......即使在函数完成执行之后。
希望对你有所帮助。
【讨论】: