为什么 window 中暴露的 JS SDK 控制一个 arguments 数组?

Why do JS SDKs exposed in window control an arguments array?

我正在构建一个要在 window 中公开的 JS SDK,然后我去研究其他 SDK 是如何做到的。

对讲机这样做:

var i = function() {
  i.c(arguments);
};
i.q = [];
i.c = function(args) {
  i.q.push(args);
};

Hotjar 这样做:

h.hj =
  h.hj ||
  function() {
    (h.hj.q = h.hj.q || []).push(arguments);
  };

Pendo 这样做:

o._q = o._q || [];
v = ['initialize', 'identify', 'updateOptions', 'pageLoad', 'track'];
for (w = 0, x = v.length; w < x; ++w)
  (function(m) {
    o[m] =
      o[m] ||
      function() {
        o._q[m === v[0] ? 'unshift' : 'push'](
          [m].concat([].slice.call(arguments, 0))
        );
      };
  })(v[w]);

但我真的不明白这段代码的目的是什么,从我收集到的少量信息来看,这似乎与他们在全局 属性 中公开的方法有关。这是我应该做的事情吗在构建 Web SDK 时担心它应该在我的复制粘贴代码段中吗?

好吧,我自己通过阅读缩小的代码弄明白了。

这些东西的存在是为了让这些方法从 JavaScript 被浏览器解释的那一刻起就完全可用,并且由于通过网络加载实际的 JS 资产需要一些时间,你可以可能会错过您的第一个方法调用。

它似乎是一个队列,仅在 SDK 首次加载时使用,处理加载时发生的方法调用。