Пытается понять содержимое параметра при использовании.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?