Понимание карты с оператором запятой

Я пытаюсь понять какой-то запутанный код, с которым столкнулся (оригинал)

Вот упрощенная версия:

[1,2,3].map(v => alert(v), alert('first'))

Почему «первые» шоу идут первыми? и почему он оценивается только один раз?

Как вы думаете, где заканчивается функция вашей толстой стрелки и почему?

deceze 03.09.2024 06:43

почему отрицательные голоса? честно любопытно

kofifus 03.09.2024 06:47

первое, что вам нужно понять, это то, что в вашем коде нет «оператора-запятой»

Jaromanda X 03.09.2024 06:48

Было бы полезно, если бы вы объяснили, почему вы ожидали, что он будет вести себя иначе, чем он есть.

deceze 03.09.2024 06:48

@deceze Я, честно говоря, не знал, чего ожидать, поскольку сказал, что это сбивает с толку (меня), и попросил помочь понять, это отрицательное голосование просто деморализует без всякой причины.

kofifus 03.09.2024 06:51

Это довольно простой f(a, b), где a — функция жирной стрелки, а balert('first'). Что еще ты видел?

deceze 03.09.2024 06:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
6
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Возвращаемое значение alert('first') передается в качестве второго аргумента Array#map, поэтому оно оценивается до вызова map.

В этом случае второй параметр map — это значение, которое будет установлено как this обратного вызова. Обратите внимание, что вы также можете передавать аргументы, которые функция даже не объявлена ​​для приема в качестве параметров.

ах, вот Developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… там написано, что есть map(callbackFn, thisArg) поэтому второе предупреждение оценивается и становится «это» ?

kofifus 03.09.2024 06:45

@kofifus Даже если бы map не принял второй параметр, поведение было бы таким же.

Unmitigated 03.09.2024 06:45
Ответ принят как подходящий

Ваше упрощение затрудняет объяснение кода, поскольку оно не имеет смысла при использовании оповещений.

Код в ссылке использует

карта(callbackFn, thisArg)

Вот оригинал

.map(
   (fx) => fx && fx !== true && (fx[0] || fx)(dispatch, fx[1]),
   update(action[0])
)

итак обратный звонок (fx) => fx && fx !== true && (fx[0] || fx)(dispatch, fx[1])

и этот аргумент равен update(action[0]), что, возможно, является побочным эффектом.

Таким образом, если элемент в массиве, по которому выполняется карта, правдив и не строго равен true, то, если первый элемент правдив, используйте его как функцию для вызова с отправкой параметров и вторым элементом в массиве fx, иначе используем сам элемент как функцию и вызываем его с диспетчеризацией и неопределенным (поскольку fx[1] не будет существовать)

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