Я пытаюсь понять какой-то запутанный код, с которым столкнулся (оригинал)
Вот упрощенная версия:
[1,2,3].map(v => alert(v), alert('first'))Почему «первые» шоу идут первыми? и почему он оценивается только один раз?
почему отрицательные голоса? честно любопытно
первое, что вам нужно понять, это то, что в вашем коде нет «оператора-запятой»
Было бы полезно, если бы вы объяснили, почему вы ожидали, что он будет вести себя иначе, чем он есть.
@deceze Я, честно говоря, не знал, чего ожидать, поскольку сказал, что это сбивает с толку (меня), и попросил помочь понять, это отрицательное голосование просто деморализует без всякой причины.
Это довольно простой f(a, b), где a — функция жирной стрелки, а b — alert('first'). Что еще ты видел?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возвращаемое значение alert('first') передается в качестве второго аргумента Array#map, поэтому оно оценивается до вызова map.
В этом случае второй параметр map — это значение, которое будет установлено как this обратного вызова. Обратите внимание, что вы также можете передавать аргументы, которые функция даже не объявлена для приема в качестве параметров.
ах, вот Developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… там написано, что есть map(callbackFn, thisArg) поэтому второе предупреждение оценивается и становится «это» ?
@kofifus Даже если бы map не принял второй параметр, поведение было бы таким же.
Ваше упрощение затрудняет объяснение кода, поскольку оно не имеет смысла при использовании оповещений.
Код в ссылке использует
Вот оригинал
.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] не будет существовать)
Как вы думаете, где заканчивается функция вашей толстой стрелки и почему?