【发布时间】:2014-01-16 11:00:36
【问题描述】:
var o = Object.create({inherited: 1}, {
foo: {
get: (function () { // a closure
var closured = 'foo';
return function () {
return closured+'bar';
};
})()
}
});
o.foo; // "foobar"
我遇到了一些问题。我真的不明白我们是如何得到字符串"foobar" 的。我会写下我目前对这段代码的错误理解,希望有人能解释我错在哪里。
-
o是一个具有foo属性的对象。 -
foo对应于具有一个属性get的对象。 (这似乎是错误的,但我看不出如何。) -
get对应于自调用匿名函数,它返回由一行return closured+'bar';组成的函数
话虽如此,我希望o.foo 返回一个对象,o.foo.get 返回一个函数,o.foo.get() 返回"foobar"。
但这不是正在发生的事情,我不知道为什么。
另外,另外,你为什么要这样写东西?为什么写:
get: (function () { // a closure
var closured = 'foo';
return function () {
return closured+'bar';
};
})()
而不是简单地:
get: (function () { // a closure
var closured = 'foo';
return closured+'bar';
})()
额外的功能层有什么好处?
【问题讨论】:
标签: javascript function closures