문제

우리는 매우 큰 JavaScript 응용 프로그램을 가지고 있으며, 수개월의 코딩 후에는 불가피하게 변수가 var 다음 방식의 키워드 :

function() {  
  x = 5; ...  
}

대신에:

function() {  
  var x = 5; ...  
}

이것은 어딘가에서 일어나고 있습니다 - 우리는 어디에 있는지 확실하지 않습니다. 그리고 문제의 변수 이름을 찾는 것이 어렵습니다. 왜냐하면 그것은 우리 소스에서 1000 시간이 나타나는 일반적인 단어이기 때문입니다.

Firebug에게 주어진 글로벌 변수를 처음 작성하는 라인을 깨뜨 리도록 요청하는 방법이 있습니까? 명확히하기 위해 window.x 전환 undefined 정의 된 값으로, 진술을 중단합니다.

나는 시계 표현식을 만들려고 시도했고 그것을 중단 점으로 바꿀 수 있기를 바랐지만 어떤 종류의 컨텍스트 나 범위 없이는 시계 표현식을 만들 수없는 것 같습니다.

이것이 Firebug에서는 불가능하다면 Firefox에서 이것을 일반적으로 달성 할 수있는 것에 관심이 있습니다.

도움이 되었습니까?

해결책

몇 가지를 제공했습니다

  1. 당신은 변수의 이름을 알고 있습니다
  2. 글로벌 범위 (외부 함수 선언)에서 해당 이름을 가진 변수는 없지만 내부 기능 만 있습니다.
  3. 변수를 선언하는 함수에 대한 호출이 있습니다.

이 작은 스크립트는 트릭을 수행 할 것입니다.

<script type="text/javascript">
window.__defineSetter__("x", function(value) { console.trace(); });
x = 1;
</script>

해당 할당 전에 실행 된 코드의 흔적을 얻을 수 있습니다.

어떤 상황을보고하지 못할 수 있으므로 살펴보십시오. jslint. 모든 JS 파일을 바로로드하고 보풀을 뿌립니다.

다른 팁

다음은 Firefox-Specific을 사용하기 때문에 Firefox에서만 작동하는 또 다른 솔루션입니다. watch 방법.

이 JavaScript 조각을 HTML 페이지의 맨 위에 놓습니다. <head> 꼬리표:

<script>
window.watch('x', function() { debugger });
</script>

주목하십시오 watch 모든 JavaScript 객체에서 작동합니다 (window 글로벌 JavaScript 객체입니다).

Ionut G. Stan의 솔루션을 수정하여 사용한 솔루션은 다음과 같습니다.

window.__defineSetter__("name", function(value) {
  if (value=="div") {
    debugger;
  }
});

나는 사용했다 debugger 대신에 console.trace(), 그래서 나는 멈추고 곤경에 처할 수있었습니다. 와 함께 console.trace() 이 라인이 여러 번 실행되면서 Bazillion 추적 진술을 받았습니다.

누수 범위는 Dojo에 묻힌 것으로 판명되었으며, 여기서 Dojo는이 변수를 처리 된 요소의 이름으로 설정하고 있습니다.

Seamonkey 브라우저에서 웹 페이지를보고 (버전 1.1.16을 사용합니다) 오류 콘솔을 보면 각 할당에 대한이 유형의 메시지가 표시되지 않은 변수에 대한 메시지가 표시됩니다.

Warning: assignment to undeclared variable x
Source File: http://....js
Line: ##

디버깅 외에도 코드를 확인하는 것이 좋습니다. jslint, 글로벌 범위의 예기치 않은 과제를 오류로보고합니다.

JSLINT의 여러 명령 줄 번들이 있습니다. jslint4java 크로스 플랫폼을 사용할 수 있습니다 개미 빌드 스크립트.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top