JavaScript 将函数传递给 map();

JavaScript Passing in a function to map();

有人可以解释一下下面的代码是如何工作的吗?

...

articles.map(createArticle).join("\n");

function createArticle(article){
  return `
    <div class="article">
      <h1>${article.news}</h1>
    </div>
  `
}

我了解 map(); 的工作原理,只是不明白它从哪里获取文章,因为它没有作为参数传递给 map();

中的 createArticle 函数

来自MDN docs

map calls a provided callback function once for each element in an array, in order, and constructs a new array from the results.

因此,argument 指的是每个元素;在迭代期间。

createArticle 是对文章数组的每个元素调用的回调。

As explained in the doc, "callback is invoked with three arguments: the value of the element, the index of the element, and the Array object being traversed."

所以在这里,article 是被迭代的当前元素的值。

createArticle 函数实际上传递了 3 个参数:数组中的项目、项目的索引和数组。

articles.map(function createArticle(article, i, arr) {
    return `
        <div class="article">
            <h1>${article.news}</h1>
        </div>
    `
});

您的代码只是将 createArticle 函数从匿名函数更改为命名函数。

articles.map(createArticle);

function createArticle(article, i, arr) {
    return `
        <div class="article">
            <h1>${article.news}</h1>
        </div>
    `
}

由于不需要在 JavaScript 中声明参数,您的代码不包含 iarr 参数。

articles.map(createArticle);

function createArticle(article) {
    return `
        <div class="article">
            <h1>${article.news}</h1>
        </div>
    `
}

您可以在 MDN

上看到完整的解释和 polyfill(现在不需要,但在尝试理解函数时会有所帮助)

函数 createArticle 作为参数传递给 map

map 的代码(不是您编写的,内置于​​ JavaScript 引擎中,因此在您 copy/pasted 的代码中不可见) calls createArticle (它可以访问,因为您将它作为参数传递)。由于 that 代码正在调用它(对数组中的每个元素调用一次),它可以传递 createArticle 它喜欢的任何参数。

它传递的参数在记录 map 的任何地方都有记录,包括:

var persons = [
    {firstname : "Deepak", lastname: "Patidar"},      
    {firstname : "Anjular", lastname: "5"},
    {firstname : "Java", lastname: "script"}
];


function getFullName(item,index) {
    var fullname = [item.firstname,item.lastname].join(" ");
    return fullname;
}

function myFunction() { 
    document.getElementById("demo").innerHTML = persons.map(getFullName);
}