在函数表达式上使用 .map 时难以理解参数内容

Struggling to Understand the Parameter Content when using .map on Function Expressions

所以我在看函数表达式。

这是我正在玩的代码:

var modifiedNames = [ "Thomas Meeks",
                      "Gregg Pollack",
                      "Christine Wong",
                      "Dan McGaw" ];

modifiedNames.map(function(cheese) {
  alert("Yo, " + cheese + "!");
});

它工作正常,但我无法理解它的一部分。我知道 .map 在做什么,但参数真的让我很困惑。 参数是如何收集数组信息的?我称它为奶酪,因为这只是我的测试词。

我已经阅读了一些解释,但我只是没有领会,希望这里有人可以稍微简化一下解释。谢谢。

您将函数传递给 .map(),然后它会运行一个循环,并在每次迭代时调用该函数,将当前项目传递给它。

可以这样想:

for (var i = 0; i < array.length; i++) {
  callback(array[i]);
}

这里array是你调用.map()的数组,callback是你传入的函数

现在这不那么神秘了。它只是在循环中调用你的函数。

当然,.map() 比这做更多的工作并传递更多的参数,但这显示了参数是如何填充的。


更完整的地图实现如下所示:

Array.prototype.myMap = function(callback, thisArg) {
  var result = new Array(this.length);

  for (var i = 0; i < this.length; i++) {
    if (i in this) {
      result[i] = callback.call(thisArg, this[i], i, this);
    }
  }
  return result;
};

您是想问这在内部究竟是如何工作的?

.map 在幕后使用 for 循环并将数组中的每个元素传递给奶酪指针。所以奶酪会 "Thomas Meeks" 并且它会提醒它然后继续。

How is the parameter collecting the array's information? I called it cheese as that's just my go-to test word.

cheese是命名函数参数,它定义了函数范围内传递的参数标识符。与

相同
function fn(cheese) {
  console.log(cheese)
}

fn("and crackers");

或使用.map()

["and crackers"].map(fn);

另见