2

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

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

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

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

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

对比:

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

2 回答 2

6

我想如果你不包括 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/不起作用

于 2012-07-30T13:04:19.230 回答
0

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

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(...)返回可以调用的对象?

于 2012-07-30T13:31:49.273 回答