function createFunctionWithProperty(property) {
functionWithProperty.property = property;
return functionWithProperty;
function functionWithProperty() {
}
}
var a = createFunctionWithProperty(123);
var b = createFunctionWithProperty(321);
alert(a.property + " : " + b.property); // 123 : 321
据我所知,createFunctionWithProperty
和functionWithProperty
都是函数声明,它们在执行任何JavaScript代码之前都会被提升,解析并生成。但是在某些时刻,在调用createFunctionWithProperty
函数时,functionWithProperty
变成了一个闭包,这是functionWithProperty
函数的一个非常特殊的实例,它有自己的属性和变量,它是关闭的。每个实例都有所不同。这一切都在理论上,但在这种情况下,我不明白事情是如何运作的。是否有人会详细分析functionWithProperty
何时以及如何成为一个闭包。谢谢。
答案 0 :(得分:2)
在这种情况下,如果它是一个单独的闭包函数并不重要,你可能也做过:
function createObjectWithProperty(property) {
var objectWithProperty = {};
objectWithProperty.property = property;
return objectWithProperty;
}
var a = createObjectWithProperty(123);
var b = createObjectWithProperty(321);
alert(a.property + " : " + b.property);
答案 1 :(得分:2)
您发布的这个示例代码看起来像是举例,而不是闭包。如果你改变:
function createFunctionWithProperty(property) {
functionWithProperty.property = property;
return functionWithProperty;
function functionWithProperty() {
}
}
为:
function createFunctionWithProperty(property) {
functionWithProperty.property = property;
return functionWithProperty;
var functionWithProperty = function () {
}
}
您会看到虽然var functionWithProperty = function () {}
和function functionWithProperty() {}
都是宣布某个功能的方法,但其中一个将被悬挂,而另一个则不会。虽然这两个函数都充当闭包,但这个例子并没有给出一个很好的例子,说明它们为什么充当闭包,或者与javascript中的闭包相关的好处或陷阱。
编辑:我想它也是一个很好的例子,说明函数是如何在javascript(大多数)中的第一类对象。与其他语言不同,javascript允许您为函数指定属性。也许这就是你想通过说“封闭”来理解的。