服务 api 片段的工作原理

How services api snippets works

我正在将一个网站集成到 Facebook Pixel,虽然我知道我只能将代码片段放在页面的头部,但我很想了解这个代码片段的工作原理。类似的模式发生在其他服务中:

< script >
  ! function(f, b, e, v, n, t, s) {
    if (f.fbq) return;
    n = f.fbq = function() {
      n.callMethod ?
        n.callMethod.apply(n, arguments) : n.queue.push(arguments)
    };
    if (!f._fbq) f._fbq = n;
    n.push = n;
    n.loaded = !0;
    n.version = '2.0';
    n.queue = [];
    t = b.createElement(e);
    t.async = !0;
    t.src = v;
    s = b.getElementsByTagName(e)[0];
    s.parentNode.insertBefore(t, s)
  }(window, document, 'script',
    'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '{your-pixel-id-goes-here}');
fbq('track', 'PageView'); 
< /script> 
< noscript >
  <
  img height = "1"
width = "1"
style = "display:none"
src = "https://www.facebook.com/tr?id={your-pixel-id-goes-here}&ev=PageView&noscript=1" / >
< /noscript>

我不明白它是如何被调用的,每个参数的含义是什么,这个函数应该做什么 return。

它正在创建一个名为 fbq 的对象并将其附加到 window。它还在页面上添加了一个脚本标签。该脚本标记链接到 connect.facebook.net url。我认为 fbq 的作用更大,因为此时 fbq 看起来非常稀疏。

代码段本身是 IIFE。它声明一个函数,然后立即调用它。该函数采用可爱的参数 f, b, e, v, n, t, s,但不能帮助任何人理解代码。当它调用函数时,它将 window 传递给 fdocument 传递给 b"script" 传递给 e,url至 v。其他参数未填充。 nts 都在代码段内分配。将它们作为函数参数可以让作者避免 var n = ... ,这仅在尝试优化每个可能的字节时才有用。当作者将事物分配为 !0 时,可以看到另一个大小优化,即 true,但字符数减半。