2013-04-23 74 views
0

我正在读一本书,并遇到“JavaScript中的闭包限制了函数中变量的范围”..这是否意味着,如果从闭包的函数对象继承的任何其他对象无法访问其属性JavaScript中的闭包是否仅限制变量的范围?

+0

关闭对范围没有影响,它们是范围的结果。 – RobG 2013-04-23 03:09:24

+0

[JavaScript关闭如何工作?]的可能重复(http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) – 2013-04-23 03:10:07

+0

你是什么意思“从函数继承”? – Sebas 2013-04-23 03:13:37

回答

1

闭包是代码可以访问外部执行上下文中的变量的地方。在有用的闭包中,一个变量在包含它的函数完成执行后继续存在,例如

var x = (function() { 
    var outerA = 'A'; 
    return function() { 
    return outerA; 
    } 
}()); 

内功能访问outerA,即outerA是其范围链。内部功能被分配给x,所以后来它仍然可以访问outerA

alert(x()); // A 

所以关闭不限制范围,它们是它的一个后果。

此功能的JavaScript可用于模拟基于类的语言将调用私人成员。它也可以用于继承,其中多个对象可以访问相同的一组值(对象,函数,原语,等等)。

0

JavaScript中没有继承关系。我们只是模拟继承various means

JS中的封闭只是指在其范围内保留变量值的函数。所以是的,只要你在谈论同一个对象&范围,价值就会被保留。

+0

您可能想重新考虑“JavaScript中没有继承”。它使用原型继承,比传统的基于类的继承更加灵活。 – RobG 2013-04-23 03:32:47

+0

@RobG如果您指的是原型的克隆/链接,即使重新思考也不会帮助我将被重写的属性视为继承对象。 – loxxy 2013-04-23 03:47:03

+0

我指的是在ECMAScript中实现的[原型继承](http://www.ecma-international.org/ecma-262/5.1/#sec-4.2.1):''每个构造函数都是一个函数,它具有名为“prototype”的属性用于实现基于原型的继承和共享属性“'。很明显,JavaScript中有继承(这是ECMAScript的实现)。 – RobG 2013-04-23 04:04:28