gpt4 book ai didi

javascript - 将 eval() 与自定义全局变量一起使用

转载 作者:数据小太阳 更新时间:2023-10-29 05:27:02 25 4
gpt4 key购买 nike

有没有办法在调用 eval() 时指定要用于 global 的对象?

(我不是在问如何进行全局 eval()。)

这行不通,但这说明了我想要的:

var pseudoGlobal = {};
eval("x = 12", pseudoGlobal);
pseudoGlobal.x; // 12

重点是真正的全局绑定(bind)不受代码 eval() 中的隐式变量声明(即没有 var 关键字)的影响。

至于 eval.call(pseudoGlobal, "x=12")eval.apply(pseudoGlobal, ["x=12"]),一些解释器不会允许它。

最佳答案

当然,您可以用默认对象代替分配属性值,如

with (pseudoGlobal) eval("x=12")

但不适用于创建 属性。如果在当前执行上下文堆栈中找不到某个属性,则会在全局对象中创建它。这里的所有都是它的。你也可以尝试一些奇怪的事情:

//global code
var globalvars = {};
for (i in this)
globalvars[i] = null;
with (pseudoGlobal)
eval("x=12")
for (i in this)
if (!(i in globalvars))
{
pseudoGlobal[i] = this[i];
delete this[i];
}

如果您关心全局绑定(bind),请尝试:

var globalvars = {};
for (i in this)
globalvars[i] = this[i];
with (globalvars)
eval("x=12")

这样,绑定(bind)将在全局变量中更改。请注意,浅拷贝只会阻止一个级别的绑定(bind)更改。

关于javascript - 将 eval() 与自定义全局变量一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11050630/

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