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')