gpt4 book ai didi

javascript - 在全局范围内运行 javascript 函数

转载 作者:行者123 更新时间:2023-12-03 02:01:33 25 4
gpt4 key购买 nike

为了遵守 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)

最佳答案

我找到了一个可能的解决方案,但它丑陋:

我将函数的主体 ( How to get function body text in JavaScript? ) 保存到字符串中并在窗口范围内对其进行评估

var execute = function () {
while ((curJob = jobQueue.pop()) !== undefined) {
var entire = curJob .toString();
var body = entire.slice(entire.indexOf("{") + 1, entire.lastIndexOf("}"));
eval.call(window, body);
console.log("executed job");
}
};

关于javascript - 在全局范围内运行 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49995479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com