带 IIFE 的逗号运算符

Comma operator with IIFEs

在 react-redux 库内部,在定义 useSelector 的文件中,我发现了多个以下列方式与 IIFE 一起使用的逗号运算符实例:

    var _useReducer = (0, _react.useReducer)(function (s) {
    return s + 1;
  }, 0),
      forceRender = _useReducer[1];
      
  var subscription = (0, _react.useMemo)(function () {
    return (0, _Subscription.createSubscription)(store, contextSub);
  }, [store, contextSub]);
  var latestSubscriptionCallbackError = (0, _react.useRef)();
  var latestSelector = (0, _react.useRef)();
  var latestStoreState = (0, _react.useRef)();
  var latestSelectedState = (0, _react.useRef)();

我不明白或找不到任何关于他们为什么在 IIFE 中使用 0 的参考资料。

在逗号运算符的上下文中,计算每个值并且仅将最后一个表达式分配给变量。

在我看来和我的理解中,0 是没有意义的。 有人可以解释一下吗?

这样做的原因是从逗号运算符调用函数会将被调用函数置于全局上下文中。 (0, function)() 零只是一个约定。

如果不使用此方法调用它 this(上下文)将是本地范围。您经常会在 babel 或 TypeScript 等转译代码中发现这种行为。