2010-07-21 7 views
5

"중단 점"이라고하는 아래 코드에 중단 점을 설정하고있다. 또한 dataStore에 대한 시계 식을 추가합니다.방화 광이 내 변수가 정의되지 않았다는 것을 나에게 말하고있다.

function(){ 
    var self = {}; 
    var dataStore = []; 
    var areEq = UNAB.objectsAreEqual; 

    self.put = function(key, value){ 
    /*breakpoint*/ dataStore.push({key:key, value:value}); 
    } 
    return self; 
} 

이 중단 점에서 Firebug는 "ReferenceError : dataStore가 정의되지 않았습니다."라고 알려줍니다. "areEq"를 검사하는 것과 동일한 결과가 나타납니다. 그러나 dataStore.push는 오류없이 실행됩니다. 추가적인 이상한 점 : "self"에 대한 watch 표현식을 추가하는 것은 예상 한 자체 객체가 아니라 하나의 "put"속성을 가진 "window"객체를 보여줍니다.

도대체 무슨 일이 벌어지고 있는지 알겠습니까? 아마 self

답변

1

나는 이것이 파이어 폭스 버그라고 생각한다. 에 중단 점을 설정하면 var dataStore = []; 그런 다음 put()의 중단 점에 도달하면 계속합니다. (Firebug 1.6에서) 클로저 범위를 얻는다. 해당 범위에는 dataStore 및 self가 있습니다. 나는 파이어 폭스가 클로저 스코프를 최적화하고 있다고 생각한다. 아마 어쨌든 코드가 말도 안되기 때문이다. 데이터 스토어에 접근 할 방법이 없다. http://getfirebug.com/tests/script/stackoverflow/dataStoreIsNotDefined.html

https://developer.mozilla.org/en/DOM/window.self

+0

나는 (적어도이 특별한 방법으로는) 미쳤다는 것을 확인해 주셔서 감사합니다. 버그를 신고 해 주셔서 감사합니다. – morgancodes

1

는 현재 창을 참조로 전역에서 파이어 폭스 방화범에 의해 아마도 해결지고 있습니다. "자기"가 아닌 다른 이름을 선택하면 코드가 모든 사람을 행복하게 만들어야합니다.

+0

당신이 맞아요을 볼에

완전한 테스트 케이스는 결국 나타납니다. 'window.self'는'window'와 같습니다. OP의 코드 자체는 완벽하게 올바른 JavaScript이며 오류없이 실행되지만 Firebug 디버거는 중단되었을 때 어떻게 든 잘못된 컨텍스트를가집니다. – casablanca

+0

저는 1 년 넘게 수십 번 var self- {}를 사용하여 "클래스"를 만들었으며 결코 자신에게 문제가 없었습니다. 나는 다른 것을 시도 할 것이다. 감사! – morgancodes

+0

"self"를 "_this"로 바꾸고 동일한 동작을 얻습니다. 성가신! 기묘한! – morgancodes

관련 문제