代码之家  ›  专栏  ›  技术社区  ›  kofifus

用逗号运算符理解地图

  •  -3
  • kofifus  · 技术社区  · 1 年前

    我试图理解我遇到的一些令人困惑的代码( original )

    以下是一个简化版本:

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

    为什么“第一次”演出是第一次?为什么只评估一次?

    2 回复  |  直到 1 年前
        1
  •  1
  •   Unmitigated    1 年前

    返回值为 alert('first') 正在作为第二个论点传递给 Array#map ,因此之前对其进行了评估 map 被称为。

    在这种情况下,第二个参数 地图 是要设置的值 this 回拨。请注意,您还可以传递函数甚至没有声明为参数的参数。

        2
  •  0
  •   mplungjan    1 年前

    你的简化使得很难解释代码,因为使用警报时它没有意义。

    链接中的代码正在使用

    map(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])

    这个Arg是 update(action[0]) -这可能是一种副作用

    因此,如果遍历映射的数组中的项是真实的,并且不严格等于 true ,然后,如果第一个项为真,则将其用作函数,使用参数dispatch调用fx数组中的第二个项,否则将该项本身作为函数,使用dispatch和undefined调用它(因为fx[1]将不存在)