Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌标签管理器代码解释_Javascript - Fatal编程技术网

Javascript 谷歌标签管理器代码解释

Javascript 谷歌标签管理器代码解释,javascript,Javascript,有人能解释一下谷歌标签管理器(容器)代码并帮助我学习: <script> ( function(w,d,s,l,i){ w[l] = w[l] || []; w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'}); var f = d.getElementsByTagName(s)[0], var j = d.createElement(s), var dl = l! = 'dataLayer' ? '&l

有人能解释一下谷歌标签管理器(容器)代码并帮助我学习:

<script>
(
function(w,d,s,l,i){
w[l] = w[l] || [];
w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'});
var f = d.getElementsByTagName(s)[0],
var j = d.createElement(s),
var dl = l! = 'dataLayer' ? '&l=' +l : '' ;
j.async = true;
j.src = '//www.googletagmanager.com/gtm.js?id='+i+dl;
f.parentNode.insertBefore(j,f);
}
)
(window, document,'script','dataLayer','GTM-xxxxx');
</script>
如果变量dl(dataLayer?)被设置为值l(dataLayer?),但没有“dataLayer”,那么(奇怪的东西)+l(添加dataLayer)其他无/空字符串

谢谢

1.为什么它以一个开放的parenth开头?(“(函数…”)五个参数是什么
w
d
s
l
i

这是一个生命,看看调用括号(点
9
),看看5个参数是什么

2.将“w”数组的“L”元素设置为自身或空数组

w
window
l
'dataLayer'
,所以它说
如果(!window['dataLayer'])window['dataLayer']=[];
否则
window['dataLayer']=window['dataLayer']

3.将一个对象推到w数组的最后一个位置,2个属性和2个值

4.将var f设置为s数组的第一个元素

s
'script'
,因此
f
被设置为
d
文档中的第一个

5.将var j设置为元素s(但“d”是什么?)

j
是调用
document.createElement('script')

6.异步加载为真,此处全部清除

在元素
j

7.javascript源代码,这里没有问题

伟大的

8.完全不知道这个是做什么的,和DOM有关的

它的意思是,从
文档中的第一个
(我们称之为
f
)中,找到它是
.parentNode
,然后在
f
之前附加我们新的
元素
j

9.这似乎是函数调用?函数原型中的第一个字母似乎对应于这些括号内的参数

这是IIFE的关闭和调用,因此这里传递的内容对应于开始时的参数名称


另外,如果html页面中还没有数据层,那么这段代码如何在它之前生成数据层呢


在我开始解释之前,我想指出这是一个简化的代码,这就是为什么它很难阅读。他们这样做是为了不必反复重复使用相同的值,而这些值会占用宝贵的字节

  • a、 为什么它从一个开放的父级开始?因为它们封装了一个函数,该函数后来被称为传入
    (窗口、文档、'script'、'dataLayer'、'GTM-xxxxx')

    b、 什么是5个参数
    w
    d
    s
    l
    i
    它们稍后在代码中传递。它们分别是
    窗口、
    文档、
    脚本
    数据层
    、和
    GMT-xxxxx

  • w
    数组的
    l
    元素设置为自身或空数组。
    如果
    w[l]
    已定义为数组,请不要覆盖它。否则,请创建它(不能在未初始化的数组上调用数组函数)。这基本上是说(传入值后):

  • 将一个对象推到
    w
    数组的最后一个位置,2个属性和2个值
    这一个是正确的

  • var f
    设置为
    s
    数组的第一个元素
    这意味着:

    var f = document.getElementsByTagName('script')[0]
    
    这将获得第一个
    脚本
    标记

  • var j
    设置为元素
    s
    (但
    d
    ?)这实际上意味着:

    var j = document.createElement('script')
    
  • 异步加载为true,此处已清除所有内容这些操作非常简单

  • javascript源代码,此处已清除所有内容再次,简单

  • 完全不知道这个是做什么的,一些与DOM相关的事情?这意味着:

  • 获取
    f
    元素的父元素(即封装节点),在本例中,它可能就是
  • f
    元素之前插入
    j
    元素(这是一个新的
  • 这似乎是函数调用?函数原型中的第一个字母似乎对应于这些括号内的参数?


  • 明白了,保罗。还有一件事……iLife?干杯!@AlexStarbuck iLife意味着我立即调用了函数表达式,即在定义函数的同时调用的函数表达式,通常在代码的其余部分中不保留对自身的引用
    var f = document.getElementsByTagName('script')[0]
    
    var j = document.createElement('script')