使用Javascript Closures时,使用Object literal Vs Constructor的对象有什么不同吗?
是否存在语法差异或者闭包还有其他一些区别吗? 任何解释这两个差异的例子都会非常有用。
答案 0 :(得分:1)
闭包是函数式编程的一个特性。它们与对象或对象文字无关。
阅读以下答案 - 它很好地解释了闭包: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等语言中是不可能的。
答案 1 :(得分:0)
Closure更多的是关于变量的函数范围。因此,重要的是要知道变量的范围是它定义的函数。在此范围内运行的任何函数本身都可以访问其父函数。父函数将无法访问子函数变量,因为它超出了该子函数的范围。
因此,对象文字中的变量将作用于包含它的函数。 (如果它不在函数中,那么它在全局范围内)。构造函数是一个函数,因此它定义的任何变量本身都是作用域的,并且在外部是不可访问的。构造函数中的任何内部方法都可以访问这些已定义的变量。
当函数可以访问超出其自身范围的变量时,就会创建闭包,并且该变量可能被其他内容更改或更改...即使在函数执行完毕后也是如此。
我希望有所帮助。