使用eval()设置全局变量
Using eval() to set global variables
我使用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,得到一个javascript错误,x
是未定义的。如何使eval
正确添加此变量?
背景:上面的代码是我正在进行的一个项目中的一个最低限度的复制示例,在这个项目中,我们必须在AJAX响应期间执行javascript代码。eval
在大多数情况下都能正常工作,但这会造成问题。
您可以使用window.eval()
从全局范围运行eval()
。这将把var
指定为window
的一个变量,这就是全局变量的含义:一个附加到window
的变量。
但你真的不应该。eval()
被沙盒化是有原因的。
除非你真的知道自己在做什么,并相信你通过XMLHttpRequest
收到的一切。这是鸡/蛋的事情之一:如果你足够信任代码来执行它,那么它应该被编程得足够好,可以在全局变量前面加上window.
;因此,您不需要使用window.eval()
。
此外,除非您只是想通过使用更易于管理的XMLHttpRequest
来避免异步问题(这是第一次…),否则您真的应该创建一个脚本标记,分配它的源,并将它作为子标记附加到head或body标记。动态附加脚本标记甚至比使用XHR更快,尤其是对于大型脚本。
Eval在本地运行,您正在设置一个本地变量。
要设置全局变量,请删除var
;
<script type="text/javascript">
$(function() {
setTimeout(function() {
eval('x = 1;');
alert(x);
}, 0);
});
</script>
我不建议设置全局变量,但如果绝对必须设置,请使用window
对象:
window['x'] = 1;
相关文章:
- 在javascript函数中设置全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 使用eval()设置全局变量
- Ajax设置全局变量,但外部值消失
- 更新后,父视图未在 Electron 中的
上设置全局变量 - 为什么在定义回调/侦听器函数(异步消息传递,port.on)后没有立即设置全局变量
- 如何在不设置全局变量的情况下确定是否已调用函数
- 在函数内设置全局变量
- jQuery / JS设置全局变量,但卡在传递给AJAX自定义函数
- 在 jsdom 加载的脚本中设置全局变量
- 设置全局变量,但未获得预期结果
- 延迟调用 dojo widget 中的函数,直到设置全局变量
- 如何在Javascript中设置全局变量
- ngresource在成功响应中设置全局变量
- 如何在点击事件中设置全局变量
- 通过future函数循环和设置全局变量
- 尝试用javascript函数设置全局变量
- jQuery Ajax Post -无法使用回调函数设置全局变量
- jQuery load()函数不设置全局变量
- 设置全局变量并在jquery/javascript中访问它