2

我是 JavaScript 新手,现在对这两个概念感到困惑:具有构造函数和原型的对象,以及闭包。

在这里,闭包意味着具有嵌套在其中的其他函数及其环境的函数。

我觉得这两个概念从某种角度来说似乎是相似的:

它们都有变量,就像其他语言中的字段一样。在闭包中,它被称为环境,我认为它是值和某些变量之间的一种绑定。

而且,他们都有“方法”。最后,我认为内部嵌套函数的行为就是这样。

那么,这两个概念的本质区别是什么?或者,这两种记忆数据的方法有何不同?

如果我在上面的这些概念中犯了一些错误,请纠正我,谢谢。

4

2 回答 2

3

好吧,闭包本身没有“方法”,因为它实际上并不是一个具体的对象——它更多的是一个概念。闭包是使用函数实现的,函数本身可以有方法,但你不会将闭包描述为有方法。正如您所说,闭包是一个函数加上有关其环境的信息。

另一方面,原型只是一个基本的 JavaScript 对象,所以说原型有方法是正确的。

于 2012-07-06T15:50:35.820 回答
0

闭包原型真的不是一回事。

原型是创建新对象的模板(简而言之);例如:

 var someType = function()
 {
 };

 someType.prototype.someOtherFunction = function()
 {
 };

每当您创建 的实例时sometype,它都会someOtherFunction附加一个作为函数的成员。此外,其他实例也获得了价值。所以很容易将函数“添加”到字符串中,例如:

String.prototype.doSomething = function() 
{

}

现在所有的字符串都得到了这个方法。

闭包实际上是另一个作用域内的子作用域,它是从外部作用域到内部作用域捕获或关闭变量的行为,使其成为闭包。

例如:

function something()
{
    for(var j = 0; j < 10; j++)
    {
        setTimeout(function()
        {
            alert(j);
        }, 25);
    }
}

在这种情况下, 的值jsetTimeout回调关闭。在任何其他上下文中,j不会存在于内部函数内部(因为它既不是全局函数也不是函数的参数),但是因为它是以这种方式引入的,所以内部函数被称为关闭变量引用。

于 2012-07-06T15:50:54.197 回答