Javascript Closures(Object literal Vs构造函数)

时间:2013-03-07 07:40:22

标签: javascript jquery closures scope

使用Javascript Closures时,使用Object literal Vs Constructor的对象有什么不同吗?

是否存在语法差异或者闭包还有其他一些区别吗? 任何解释这两个差异的例子都会非常有用。

2 个答案:

答案 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更多的是关于变量的函数范围。因此,重要的是要知道变量的范围是它定义的函数。在此范围内运行的任何函数本身都可以访问其函数。父函数将无法访问函数变量,因为它超出了该子函数的范围。

因此,对象文字中的变量将作用于包含它的函数。 (如果它不在函数中,那么它在全局范围内)。构造函数是一个函数,因此它定义的任何变量本身都是作用域的,并且在外部是不可访问的。构造函数中的任何内部方法都可以访问这些已定义的变量。

当函数可以访问超出其自身范围的变量时,就会创建闭包,并且该变量可能被其他内容更改或更改...即使在函数执行完毕后也是如此。

我希望有所帮助。