2012-07-30 78 views
2

在IE 8,在此第二版本将导致以下错误:IE 8可变范围误差

Object doesn't support this property or method.

的错误是在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}); 
... 
} 
+0

L.Map函数做什么? – FishBasketGordo 2012-07-30 13:01:00

+0

什么是'L'? – ManseUK 2012-07-30 13:01:06

+0

在全局范围中声明该变量有效。不声明变量有时可用。我建议你总是在你要使用它们的范围的顶部声明JavaScript变量。 – DwB 2012-07-30 13:01:12

回答

6

I thought if you don't include var it automatically goes to global scope.

这是非常糟糕的做法,因为没有办法告诉你是否打算。它也会在严格模式下导致错误。

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

可以明确创建一个全局是这样的:

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

在这里,你让你的意图明确,不会出现此错误。


这里是证明它(运行IE8或更低)的jsfiddles:

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

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

0

在非严格模式,分配到未声明的变量用指定的值创建一个全局变量。试图访问一个未声明和未初始化变量的值都将抛出一个引用错误:

x = 5; 
alert(x); // shows 5 

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

声明的变量处理执行任何代码之前,所以他们不扔引用错误。

但是,您没有收到引用错误,当您尝试调用对象的不存在的方法时,IE会抛出一个引用错误,因此可能会尝试访问window.map()或类似的:

eg在IE中:

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

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