我有以下代码:
class MetricGoogleGateway extends AMetricGateway{
constructor(id, name, token) {
super(id, name);
this.token = token;
}
configure() {
if(!window.dataLayer && !window.gtag)
{
window.dataLayer = window.dataLayer || [];
window.gtag = (arguments) => dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'UA-113071675-1');
}
}
当浏览器加载文件时,我收到以下错误:
Uncaught SyntaxError:严格模式下的意外eval或参数
但是,如果我在chrome控制台中运行以下行,那么一切正常:
window.dataLayer = window.dataLayer || [];
window.gtag = (arguments) => dataLayer.push(arguments);
window.gtag(1);
window.gtag(2);
console.log(window.dataLayer)
-> console.log result: [1,2]
注意:
我注意到如果我更改了这行:
window.gtag = (arguments) => dataLayer.push(arguments);
对于这一行:
window.gtag = function(arguments) { dataLayer.push(arguments) }
我得到了同样的错误
答案 0 :(得分:2)
您的代码位于class
正文中,该正文在strict mode中运行(与您的所有代码一样),与粘贴到控制台中的代码段不同。
名称arguments
和eval
是特殊的,禁止作为标识符。不要使用它们。只需写一下args
,或者甚至更好地写一些像layer
一样有意义的东西。
window.gtag = (layer) => dataLayer.push(layer);