返回语句混淆里面找到帮助器方法

时间:2018-03-20 06:44:38

标签: javascript ecmascript-6

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语句的用法。为什么它使用两个返回函数,哪个返回函数在哪里?

5 个答案:

答案 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;
&#13;
&#13;