IE 8变量范围错误

IE 8 variable scope error

本文关键字:错误 范围 变量 IE      更新时间:2024-05-18

在IE 8中,第二个版本会导致以下错误:

对象不支持此属性或方法。

错误位于map = new L.Map。在第一个版本中,没有错误。

我想如果你不包括var,它会自动进入全局范围。为什么IE 8会出现错误?注意,IE 9中不会出现这种情况。

var map;
jQuery(document).ready(function() 
{
    map = new L.Map('map', {'scrollWheelZoom': false});
 ...
}

VS:

jQuery(document).ready(function() 
{
    map = new L.Map('map', {'scrollWheelZoom': false});
 ...
}

我想如果你不包括var,它会自动进入全局范围。

这是一种非常糟糕的做法,因为无法判断你是否有意这样做。在严格模式下也会导致错误。

当文档中有一些名为map的元素时,它也会导致IE中的错误。

您可以显式地创建这样的全局:

jQuery(document).ready(function() {
    window.map = new L.Map('map', {
        'scrollWheelZoom': false
    });
});

在这里,您明确了自己的意图,不会出现此错误。


以下是演示它的jsfiddles(在IE8或更低版本中运行):

http://jsfiddle.net/3Jn5N/工作

http://jsfiddle.net/3Jn5N/1/不起作用

在非严格模式下,为未声明的变量赋值会创建一个具有赋值的全局变量。试图访问未声明和未初始化变量的值将引发引用错误:

x = 5;
alert( x ); // shows 5
alert( y ); // Error: y is undefined
y = 10;

在执行任何代码之前都会处理声明的变量,这样它们就不会引发引用错误。

然而,你没有得到引用错误,你得到的是IE在试图调用一个不存在的对象方法时抛出的错误,所以很可能有人试图访问window.map()或类似的方法:

例如在IE中:

var o = {};
o.x(); // Object doesn't support this property or method

这是否是您问题的答案是未知的,new L.Map(...)是否返回了一个可以调用的对象?