2012-07-30 2 views
2

이 두 번째 버전은 다음과 같은 오류가 발생. 첫 번째 버전에는 오류가 없습니다.IE 변수 범위 오차 IE 8에서

var를 포함시키지 않으면 자동으로 전역 범위로 이동한다고 생각했습니다. 왜 Internet Explorer 8에서 오류가 발생합니까? 이것은 VS

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

IE 9에서 발생하지 않습니다 참고 :

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

L.Map 기능은 무엇을 수행합니까? – FishBasketGordo

+0

'L '은 무엇입니까 ??? – ManseUK

+0

전역 범위에서 변수 선언이 작동합니다. 변수 선언이 작동하지 않는 경우가 있습니다. JavaScript 변수를 사용할 범위의 맨 위에 항상 선언하는 것이 좋습니다. – DwB

답변

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 
    }); 
}); 

당신이 당신의 의도는 명확하게이 오류가 발생하지 않습니다.

http://jsfiddle.net/3Jn5N/가에 할당

http://jsfiddle.net/3Jn5N/1/ 비 엄격 모드에서

0

작동하지 않습니다 작동 : 여기


는 그것을 증명하기 jsfiddles (IE8에서 실행을 이하)이다 선언되지 않은 변수는 할당 된 값으로 전역 변수를 만듭니다. 미표시 및 초기화되지 않은 변수 값에 액세스를 시도하는 것은 기준 오차가 발생한다 :

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

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

선언 된 변수를 처리하는 코드가 실행되기 전에 이들이 기준 오차가 발생하지 않도록.

그러나 참조 오류가 발생하지 않으므로 개체의 존재하지 않는 메서드를 호출하려고하면 IE에서 throw되는 오류가 발생하므로 window.map() 또는 이와 비슷한 액세스 시도가있을 수 있습니다. :

예 : IE에서 :

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

이 문제에 대한 답이 호출 할 수있는 개체를 반환 new L.Map(...)하지, 알 수 있는지 여부?

관련 문제