IE 8变量范围错误
IE 8 variable scope error
在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(...)
是否返回了一个可以调用的对象?
相关文章:
- 日志:未捕获的范围错误:超过了最大调用堆栈大小
- 未捕获的范围错误:setTimeout()超过了最大调用堆栈大小
- JavaScript继承:未捕获的范围错误:超过了最大调用堆栈大小
- 收到“范围错误: 超出最大调用堆栈大小”错误
- 范围变量返回长度错误
- 范围错误与 mongo 进行$near查找
- 如何在node.js中设置mysql连接,以在带无符号整数的算术上抛出超出范围的错误
- 未捕获的范围错误:WebSQL查询结果中的项索引超出范围错误
- IE 8变量范围错误
- Chrome/jQuery未捕获范围错误:超过了最大调用堆栈大小(函数循环)
- AngularJS-范围错误:''之后超过了最大调用堆栈大小;应用程序启动
- javascript中的函数范围错误
- Chrome扩展:如何在全局范围内捕获/处理内容脚本错误
- OL3 缩放到范围控件引发“未捕获的断言错误:断言失败:无效的范围或几何”
- 我的弹性查询中出错 - 范围返回错误的请求
- Chrome 未捕获范围错误:最大调用堆栈大小超出了点击递归
- 此节点范围错误背后的原因
- jquery .on 获取未捕获的范围错误:超出最大调用堆栈大小
- 错误业力“未定义”范围变量在之前每个
- 无法更改错误范围之外的变量