未捕获的SyntaxError:严格模式下的意外eval或参数:window.gtag =(arguments)=> dataLayer.push(参数);

时间:2018-01-30 10:44:22

标签: javascript ecmascript-6

我有以下代码:

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

我得到了同样的错误

1 个答案:

答案 0 :(得分:2)

您的代码位于class正文中,该正文在strict mode中运行(与您的所有代码一样),与粘贴到控制台中的代码段不同。

名称argumentseval是特殊的,禁止作为标识符。不要使用它们。只需写一下args,或者甚至更好地写一些像layer一样有意义的东西。

window.gtag = (layer) => dataLayer.push(layer);