gpt4 book ai didi

javascript - 使用 eval() 设置全局变量

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

我使用 eval 设置全局变量的代码无法正常工作。就好像根本没有调用赋值,但没有发生脚本错误。

<script type="text/javascript">

$(function() {

setTimeout(function() {
eval('var x = 1;');
alert(x);
}, 0);
});
</script>

<div onclick="alert(x);">Click to see 'x'</div>

当页面加载时,警报显示我所期望的;它确认 x = 1。但在那之后,我单击 div 并收到 x 未定义的 javascript 错误。如何使 eval 正确添加此变量?

背景:上面的代码是我正在处理的项目中的一个最小重现示例,在该项目中我们必须在 AJAX 响应期间执行 javascript 代码。 eval 大多数时候都能正常工作,但这会导致问题。

最佳答案

您可以使用 window.eval() 从全局范围运行 eval()。这会将 var 分配为 window 的变量,这就是全局变量:附加到 window 的变量。

...但你真的不应该这样做。 eval() 被沙盒化是有原因的。

除非您真的知道自己在做什么并且相信您通过 XMLHttpRequest 接收到的一切,否则不会发生这种情况。这是先有鸡还是先有蛋的事情:如果您足够信任代码来执行它,那么它的编程应该足够好,以便在全局变量前加上 window. 开头;因此,您不需要使用 window.eval()

此外,除非你只是想通过使用更易于管理的 XMLHttpRequest 来避免异步问题(凡事都有第一次......),你真的应该只创建一个脚本标签,分配它是源代码,并将其作为子项附加到 head 或 body 标签。动态附加脚本标签甚至比使用 XHR 更快,尤其是对于大脚本。

关于javascript - 使用 eval() 设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167800/

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