Пытается понять содержимое параметра при использовании.map в выражениях функций

Поэтому я смотрю на выражения функций.

Это код, с которым я играю:

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

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

Это работает нормально, но у меня возникают проблемы с пониманием части этого. Я понимаю, что .map делает, но параметр действительно бросает меня. Как параметр собирает информацию массива? Я назвал это сыром, так как это всего лишь мое проверочное слово.

Я прочитал пару объяснений, но я просто не понимаю их, надеясь, что кто-то здесь может несколько упростить объяснение. Спасибо.

3 ответа

Решение

Вы передаете функцию .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 и передает каждый элемент массива указателю сыра. Таким образом, сыр будет "Томас Микс", и он будет предупреждать его, а затем продолжать и продолжать.

Как параметр собирает информацию массива? Я назвал это сыром, так как это всего лишь мое проверочное слово.

cheese является именованным параметром функции, который определяет идентификатор переданного параметра в области действия функции. Такой же как

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

fn("and crackers");

Или используя .map()

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

См. Также Почему.then(), связанный с Promise.resolve(), позволяет переназначить объявление const?

Другие вопросы по тегам