使用 Javascript 闭包时,使用 Object literal Vs Constructor based objects 有什么区别吗?
只有语法差异还是闭包还有其他差异?任何解释这两个差异的例子都会非常有帮助。
使用 Javascript 闭包时,使用 Object literal Vs Constructor based objects 有什么区别吗?
只有语法差异还是闭包还有其他差异?任何解释这两个差异的例子都会非常有帮助。
闭包是函数式编程的一个特征。它们与对象或对象文字无关。
阅读以下答案 - 它很好地解释了闭包: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
变成了一个闭包,因为它在嵌套函数返回时关闭了count
嵌套函数中使用的变量counter
(移出 的范围getCounter
)。
封闭的变量(在这种情况下count
)称为upvalue。闭包很重要,因为它们允许超出范围(被垃圾收集)的值保持活动状态。这在 C/C++ 和 Java 等语言中是不可能的。
闭包更多的是关于变量的函数范围。所以重要的是要知道变量的作用域是定义它的函数。在这个作用域内运行的任何函数都可以访问其父函数本身。父函数将无法访问子函数变量,因为它超出了子函数的范围。
因此,对象文字中的变量将被限定为包含它的函数。(如果它不在函数中,那么它在全局范围内)。构造函数是一个函数,因此它定义的任何变量都在其自身范围内且在外部不可访问。构造函数中的任何内部方法都可以访问那些定义的变量。
当函数可以访问其自身范围之外的变量并且该变量可能被其他东西更改或更改时,会创建闭包......即使在函数完成执行之后也是如此。
我希望这有助于一些什么。