var posts = [{
id: 1,
title: 'new post'
},
{
id: 2,
title: 'old post'
}
];
var comment = {
postId: 1,
content: 'Great Post'
};
function postForComment(posts, comment) {
return posts.find(function(post) {
return post.id === comment.postId
});
}
var c = postForComment(posts, comment);
console.log(c);
在上面的代码中,输出是预期的,但我无法理解函数postForComment
中return语句的用法。为什么它使用两个返回函数,哪个返回函数在哪里?
答案 0 :(得分:1)
posts.find(function(post){
return post.id===comment.postId
});
您可以认为上面的代码段是独立的。在这种情况下,此函数将返回满足post
的{{1}}值。
函数post.id === comment.postId
接收返回的值。 postForComment
中的第一个返回值将依次将此值传递给变量postForComment
c
在此代码段中有两个功能。第二个function postForComment(posts,comment){
return posts.find(function(post){
return post.id===comment.postId
});
}
语句返回满足条件的第一个post值的值。在return
中,帖子的每个值都作为变量post传递给函数。当条件满足时,函数inside将返回满足条件posts.find
的帖子的值。第一个post.id === comment.postId
语句是这样的,return
返回的值将返回给函数的调用者。也就是说,变量c将接收posts.find
答案 1 :(得分:1)
简单地说,每个function
都需要返回其结果,这里有两个嵌套。
postForComment
以
return posts.find(...)
但posts.find
内部也是function
,还需要返回其结果。
function(post) {
return post.id === comment.postId
}
因此,如果function
内部posts.find
(通常称为回调函数)没有返回任何内容,postForComment
将无法获得什么都可以归还。
答案 2 :(得分:0)
find函数接受回调函数,在你的情况下回调函数是
function(post) {
return post.id === comment.postId
}
因此内部return
是从callback
函数&外部返回是postForComment
函数
答案 3 :(得分:0)
postForComment中的第一个返回使此函数返回帖子中找到的值。 传递给posts.find的回调函数内部的返回是在这里因为array.prototype.find期望一个返回true或false的回调
答案 4 :(得分:0)
您的代码的简化版本如下所示。 find()
函数迭代所有posts
并调用compareIDs()
,将当前帖子作为参数传递。
当compareIDs()
返回true时,find
将停止迭代并返回当前帖子,该帖子将存储在matchingPost
中。
现在matchingPost
将从postForComment()
返回c
并存储在var posts = [{
id: 1,
title: 'new post'
},
{
id: 2,
title: 'old post'
}
];
var comment = {
postId: 1,
content: 'Great Post'
};
function postForComment(posts, comment) {
var matchingPost = posts.find(function compareIDs(post) {
return post.id === comment.postId
});
return matchingPost;
}
var c = postForComment(posts, comment);
console.log(c);
。
HTH
<h3>
<button type="button" onClick="Fight();"><background color="gray"><font color="black">Fight!</font></button>
</h3>
&#13;