【发布时间】:2018-04-24 07:12:52
【问题描述】:
为了符合 GDPR,我将我们网店中的所有附属脚本封装在函数中,并将它们添加到作业队列中。
在用户接受我们的隐私政策后,我会运行所有排队的作业。我想在全局范围中运行它们,因此所有声明的变量都可以在全局范围内访问,因为一些附属脚本依赖于全局变量(我知道这很丑;))。
我知道,我可以重写所有 javascript 代码并在全局范围内声明变量并将其余代码包装在一个函数中。 但是我需要编辑很多外部模块(我们正在运行一个 magento 网上商店并使用外部模块来包含附属脚本)
我目前的做法:
var jobQueue = [];
var add = function (fn) {
jobQueue.push(fn);
console.log("function pushed to queue");
};
var execute = function () {
while ((curJob = jobQueue.pop()) !== undefined) {
curJob();
console.log("executed job");
}
};
我的问题是一些外部脚本取决于我的工作中声明的变量。是否有可能像代码在全局范围内运行一样运行函数?
我已经找到了类似的东西,但我无法让它工作: Javascript eval on global scope? (这不适用于函数)
eval.call(window, x, y, z)
【问题讨论】:
-
add和execute函数是如何被调用的? -
如果它们是你的函数,你可以用不同的方式声明变量(不要使用
var)。但老实说,我会摆脱任何需要你的变量是全局的代码。 -
我也不喜欢它,但我需要这个才能让附属脚本正常工作。由于 gdpr 我更改了我的代码并在用户接受我们的隐私政策后声明/加载变量/脚本......但是......在全局范围内运行的代码现在被包装在一个函数中并稍后调用......但是加载外部附属脚本时,它需要全局范围内的变量
-
我猜你有很多函数使用相同的变量,所以通过将变量放在全局执行上下文中,所有函数都可以访问变量?
-
@ThumChoonTat 我将我网站上的所有附属脚本包装在一个功能块内,并将它们添加到我的工作队列中......当用户接受隐私政策时(因为 gdpr)我执行所有我的排队作业
标签: javascript