1

所以我在看函数表达式。

这是我正在玩的代码:

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

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

它工作正常,但我无法理解其中的一部分。我掌握了.map正在做什么,但参数真的让我很震惊。参数如何收集数组的信息?我称它为奶酪,因为这只是我的首选测试词。

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

4

3 回答 3

1

参数如何收集数组的信息?我称它为奶酪,因为这只是我的首选测试词。

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

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

fn("and crackers");

或使用.map()

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

另请参阅为什么链接到 Promise.resolve() 的 .then() 允许重新分配 const 声明?

于 2017-08-18T16:31:14.773 回答
1

您是在问这在内部到底是如何工作的?

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

于 2017-08-18T16:17:38.537 回答
1

您将函数传递给.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;
};
于 2017-08-18T16:16:28.987 回答