全局变量没有在堆栈中传递 - IE8

时间:2012-10-03 13:05:38

标签: javascript internet-explorer internet-explorer-8 global-variables eval

我正在开发一个在Internet Explorer中破解的遗留应用程序。它具有以下代码:

脚本1:/* Call script 2 */; x.a(b)

脚本2:eval(script3)

脚本3:var x = x || {}; x.a = function(){ ... }

在Firefox中,这可以按预期工作。

然而,在Internet Explorer中,它失败了说“x未定义”(这是大大简化的)。我在代码中追溯到这一点,并注意到x在脚本3中定义,但随后在堆栈中向下返回到脚本2,它失去了它的可用性/范围(我通过放置console.log语句来测试它在两者中 - IE在脚本3中是正常的,但在脚本2中崩溃了。)

Internet Explorer和/或eval()函数会导致这种情况发生,我可以选择修复它吗?

2 个答案:

答案 0 :(得分:0)

为什么不设置测试并自己查看?

这是一个:http://jsfiddle.net/Y3bf5/

在IE7 +中似乎工作正常。

答案 1 :(得分:0)

您可能希望将脚本3更改为var x; x = x || {}; x.a = function(){ ... }
这可能是由于在此变量 x 中声明变量之前先抢先使用变量引起的。
变量x在脚本2 中不可用的事实是因为eval()方法突然失败,“ x未定义
实际上我只从代码脚本3 的代码中理解了一点点
如果我能够瞥见它,那么我可能比现在更好地帮助你。
希望这有帮助