Javascript 函数中的返回值
Returning Values in Javascript Functions
我在理解@Jacob Swartwood 的闭包时遇到了这个答案
而且我无法理解 littleGirl
如何像调用函数一样调用故事。不应该是 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();
为了扩展@asantaballa 所说的内容,story
是一个值为 function () {...}
的键。如果你要 运行 console.log(littleGirl.story)
你会看到 function princess/<.story()
公主可以这样重写...
function princess() {
var adventures = [];
function princeCharming() { /* ... */ }
var unicorn = { /* ... */ },
dragons = [ /* ... */ ],
squirrel = "Hello!";
var getAdventure = function () {
return adventures[adventures.length - 1];
};
var retObj = new Object(); // same as '{}'
retObj.story = getAdventure;
return retObj;
}
var littleGirl = princess();
littleGirl.story();
也许如果我们将其分解并一次添加一件事,它会更有意义。
首先,一个函数 princess
即 returns undefined
:
function princess() {
}
princess();
//> undefined
接下来,returns 一个对象字面量的函数:
function princess() {
return {};
}
princess();
//> Object {}
接下来,一个函数 returns 一个对象文字,里面有一个函数(returns undefined
):
function princess() {
return {
story: function {}
};
}
princess().story();
//> undefined
接下来,一个函数 returns 一个对象字面量,里面有一个函数 returns 一个数组:
function princess() {
return {
story: function {
return [];
}
};
}
princess().story();
//> Array []
我认为这涵盖了您的 大部分 观点。但是,none 其中与闭包有很大关系。在您的示例中,数组 adventures
是要关闭的内容。这允许某种 private
成员(就像 Java 中的访问修饰符)。
所以,最后,一个函数 returns 一个对象字面量,里面有一个函数关闭 private 数组:
function princess() {
var myArray = [1, 2, 3];
return {
story: function {
return myArray[myArray.length - 1]; // get the last one: 3
}
};
}
princess().story();
//> 3
或者换句话说,公主只是一个函数。
你用 princess() 调用它,它 return 有点意思。
它 return 的东西是这样的对象:
{
story:function() {...}
}
这个对象里面有一个功能(故事)。
毕竟,函数只是一些数据,您可以像其他数据一样传递并分配给变量。
一个对象是一种将不同数据组合成一个单一的..嗯..对象
的方法
因此您可以将函数放入对象中。函数可以 return 任何数据类型,包括对象。
// set variable aFunc to some function
var aFunc=function() {...}
// call it
aFunc();
// Set an object
var anObj= {
anInt:3,
aString:"blabla",
itsFunction:aFunc
}
调用里面的函数
anObj.itsFunction();
return使用同一对象的函数是
function getAnObj() {
return {
anInt:3,
aString:"blabla",
itsFunction:aFunc
}
}
在我们的例子中,princess 就像 getAnObj,
故事就像一个函数
所以
princess().story();
就像
var anObj=getAnObj();
anObj.itsFunction();
一个函数 (princess
) returned 一个对象 (littleGirl
),其中有一个函数 (story
)。你叫它。
一个函数 (getAnObj
) returned 一个对象 (anObj
),其中有一个函数 (itsFunction
)。你叫它。
姓名..
我在理解@Jacob Swartwood 的闭包时遇到了这个答案
而且我无法理解 littleGirl
如何像调用函数一样调用故事。不应该是 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();
为了扩展@asantaballa 所说的内容,story
是一个值为 function () {...}
的键。如果你要 运行 console.log(littleGirl.story)
你会看到 function princess/<.story()
公主可以这样重写...
function princess() {
var adventures = [];
function princeCharming() { /* ... */ }
var unicorn = { /* ... */ },
dragons = [ /* ... */ ],
squirrel = "Hello!";
var getAdventure = function () {
return adventures[adventures.length - 1];
};
var retObj = new Object(); // same as '{}'
retObj.story = getAdventure;
return retObj;
}
var littleGirl = princess();
littleGirl.story();
也许如果我们将其分解并一次添加一件事,它会更有意义。
首先,一个函数 princess
即 returns undefined
:
function princess() {
}
princess();
//> undefined
接下来,returns 一个对象字面量的函数:
function princess() {
return {};
}
princess();
//> Object {}
接下来,一个函数 returns 一个对象文字,里面有一个函数(returns undefined
):
function princess() {
return {
story: function {}
};
}
princess().story();
//> undefined
接下来,一个函数 returns 一个对象字面量,里面有一个函数 returns 一个数组:
function princess() {
return {
story: function {
return [];
}
};
}
princess().story();
//> Array []
我认为这涵盖了您的 大部分 观点。但是,none 其中与闭包有很大关系。在您的示例中,数组 adventures
是要关闭的内容。这允许某种 private
成员(就像 Java 中的访问修饰符)。
所以,最后,一个函数 returns 一个对象字面量,里面有一个函数关闭 private 数组:
function princess() {
var myArray = [1, 2, 3];
return {
story: function {
return myArray[myArray.length - 1]; // get the last one: 3
}
};
}
princess().story();
//> 3
或者换句话说,公主只是一个函数。
你用 princess() 调用它,它 return 有点意思。
它 return 的东西是这样的对象:
{
story:function() {...}
}
这个对象里面有一个功能(故事)。
毕竟,函数只是一些数据,您可以像其他数据一样传递并分配给变量。
一个对象是一种将不同数据组合成一个单一的..嗯..对象
的方法因此您可以将函数放入对象中。函数可以 return 任何数据类型,包括对象。
// set variable aFunc to some function
var aFunc=function() {...}
// call it
aFunc();
// Set an object
var anObj= {
anInt:3,
aString:"blabla",
itsFunction:aFunc
}
调用里面的函数
anObj.itsFunction();
return使用同一对象的函数是
function getAnObj() {
return {
anInt:3,
aString:"blabla",
itsFunction:aFunc
}
}
在我们的例子中,princess 就像 getAnObj, 故事就像一个函数
所以
princess().story();
就像
var anObj=getAnObj();
anObj.itsFunction();
一个函数 (princess
) returned 一个对象 (littleGirl
),其中有一个函数 (story
)。你叫它。
一个函数 (getAnObj
) returned 一个对象 (anObj
),其中有一个函数 (itsFunction
)。你叫它。
姓名..