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