我正在开发一个在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,它失去了可用性/范围(我通过将控制台.log语句放在两者中来测试这一点 - IE 对脚本 3 中的语句没问题,但脚本 2 中的那个崩溃了)。
Internet Explorer和/或eval()
功能如何导致这种情况发生,我有什么修复方法?
为什么不设置一个测试并亲自看看呢?
这是其中之一:http://jsfiddle.net/Y3bf5/
它似乎在IE7 +中工作正常。
希望将脚本 3 更改为var x; x = x || {}; x.a = function(){ ... }
这可能是由于在本例中声明变量 x 之前抢占使用变量造成的。
变量 x 在脚本 2 中不可用的事实是因为 eval()
方法突然失败,并显示"x 未定义"
实际上,我只从引用脚本 3 的代码段中理解了一点点
如果我能瞥见它,那么我可能会比现在更好地帮助你。
希望这有帮助