我在理解@Jacob Swartwood 的闭包时遇到了这个答案 https://stackoverflow.com/a/6472397/3179569
而且我不明白 littleGirl
是如何调用 story 的,就好像它是一个函数一样。不应该是 littleGirl();
以便调用 princess
函数吗?公主函数不是返回一个键值对吗,这意味着它正在返回一个对象?那么 littleGirl
如何像访问一个函数一样访问一个键呢? (因为 story
是关键,对吧?)
我尝试在 javascript 中搜索返回键值对的术语,但没有找到合适的解释。我希望这里有人可以帮助我。我有 Java 和 C++ 的背景,所以这有点令人困惑。
function princess() {
var adventures = [];
function princeCharming() { /* ... */ }
var unicorn = { /* ... */ },
dragons = [ /* ... */ ],
squirrel = "Hello!";
return {
story: function() {
return adventures[adventures.length - 1];
}
};
}
var littleGirl = princess();
littleGirl.story();
最佳答案
也许如果我们将其分解并一次添加一件事,它会更有意义。
首先,返回undefined
的函数princess
:
function princess() {
}
princess();
//> undefined
接下来,一个返回对象字面量的函数:
function princess() {
return {};
}
princess();
//> Object {}
接下来,一个返回对象文字的函数,其中包含一个函数(返回 undefined
):
function princess() {
return {
story: function {}
};
}
princess().story();
//> undefined
接下来,一个返回对象字面量的函数,里面有一个返回数组的函数:
function princess() {
return {
story: function {
return [];
}
};
}
princess().story();
//> Array []
我认为这涵盖了您的大部分观点。然而,这一切都与闭包无关。在您的示例中,数组 adventures
是正在关闭的内容。这允许某种类型的 private
成员(类似于 Java 中的访问修饰符)。
所以,最后,一个函数返回一个对象字面量,其中一个函数在一个私有(private)数组上关闭:
function princess() {
var myArray = [1, 2, 3];
return {
story: function {
return myArray[myArray.length - 1]; // get the last one: 3
}
};
}
princess().story();
//> 3
关于javascript - 在 Javascript 函数中返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360200/