使用eval()设置全局变量

ten*_*our 5 javascript ajax eval

我使用设置全局变量的代码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>
Run Code Online (Sandbox Code Playgroud)

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

背景:上面的代码是我正在研究的项目中的一个最小复制示例,我们必须在AJAX响应期间执行javascript代码.eval大部分时间都能正常工作,但这会导致问题.

Jua*_*des 5

Eval 在本地运行,您正在设置本地变量。

要设置全局变量,请删除var;

<script type="text/javascript">

    $(function() {

        setTimeout(function() {
            eval('x = 1;');
            alert(x);
        }, 0);
    });
</script>
Run Code Online (Sandbox Code Playgroud)

  • @asawyer 我真的不在乎。我只是回答问题。这就是OP代码不起作用的原因 (3认同)

Sco*_*aud 5

您可以使用从全局范围window.eval()运行eval().这将指定var为变量of window,这是全局变量:附加到的变量window.

......但你真的不应该.eval()沙盒是有原因的.

除非你真的知道自己在做什么并相信你所接受的一切,否则这不是XMLHttpRequest.它是那些鸡/蛋的东西之一:如果你相信代码足以执行它,它应该编程得足够好,window.以开头的全局变量为前缀; 因此,你不应该使用window.eval().

此外,除非你只是试图通过使用更易管理XMLHttpRequest(第一次使用所有内容......)来避免异步头痛,你真的应该创建一个脚本标记,分配它的源代码,并将其作为子代附加到头部或身体标签.动态附加脚本标记甚至比使用XHR更快,特别是对于大脚本.