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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回语句混淆里面找到帮助器方法相关的知识,希望对你有一定的参考价值。

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

答案

简单地说,每个function都需要返回它的结果,这里有两个嵌套的。

postForComment返回结果

return posts.find(...)

但在posts.find内部也是一个function,它也需要返回其结果。

function(post) {
  return post.id === comment.postId
}

因此,如果function内部的posts.find(通常称为回调函数)不返回任何内容,那么postForComment也无法返回任何内容。

另一答案
posts.find(function(post){
  return post.id===comment.postId
 });

您可以将上面的代码段视为独立的。在这种情况下,此函数将返回满足postpost.id === comment.postId的值。

返回的值由函数postForComment接收。 postForComment中的第一个返回值将依次将此值传递给变量c

function postForComment(posts,comment){
 return posts.find(function(post){
  return post.id===comment.postId
 });
}

在此代码段中有两个功能。第二个return语句返回满足条件的第一个post值的值。在posts.find中,帖子的每个值都作为变量post传递给函数。当条件满足时,里面的函数将返回满足条件post.id === comment.postId的帖子的值。第一个return语句是这样的,posts.find返回的值将返回给函数的调用者。也就是说变量c将接收posts.find返回的值

另一答案

find函数接受一个回调函数,在你的情况下回调函数是

function(post) {
       return post.id === comment.postId
 }

所以内部return是从callback函数返回,外部返回是从postForComment函数返回

另一答案

postForComment中的第一个返回使此函数返回帖子中找到的值。传递给posts.find的回调函数内部的返回在这里是因为array.prototype.find期望一个返回true或false的回调

另一答案

代码的简化版本如下所示。 find()函数迭代所有posts并调用compareIDs(),将当前帖子作为参数传递。

compareIDs()返回true时,find将停止迭代并返回当前帖子,该帖子将存储在matchingPost中。

现在matchingPost将从postForComment()返回并存储在c

HTH

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);

以上是关于返回语句混淆里面找到帮助器方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段中使用按钮[关闭]

.Net代码混淆工具DotNetReactor

C# - 检测混淆器

Allatori:代码混淆器的使用

如何将微调器的值放入不同的片段中?

Java培训分享5个常用Java代码混淆器