2016-09-01 2 views
0

일반적인 브라우저 환경에서는 전역 변수로 인해 쓰레기가 발생합니다.로드하는 웹 응용 프로그램은 대개 더 많습니다. devtools의 세션에서 측면을 추적 할 때, 창과 명령 행 내역에서 이상적으로 모으지 않고, 내가 다시 시작했는지를 신속하게 확인하기 위해 모든 자체 변수를 나열하고 싶습니다. 페이지 또는 브라우저 오브젝트 모델 (당신이 모든 전역 변수뿐 아니라 원하는 경우 그 당신이 개발자 도구에서 만든 there's a Q&A for that here.) Chrome DevTools에서 생성 한 모든 전역 변수를 나열하려면 어떻게합니까?

+0

[구글 크롬 콘솔에서 모든 자바 스크립트 변수 목록보기] (의 가능한 중복 http://stackoverflow.com/questions/2934787/view-list-of-all-javascript-variables-in-google- 크롬 콘솔) –

답변

1

동적 전역으로 새로운 식별자를 누설하지 않는 페이지를 제공,이 해킹은 모든 ID를 나열 window 식별자 뒤에 작성된 것으로,이 목적을 위해 매우 잘 어울리는 것으로 보입니다. 그것은 아무것도보다 더 완벽한 건 아니지만,

function myids() { 
    function notUs(i) { return i !== 'myids' && i !== 'myvars'; } 
    var ids = Object.keys(window); 
    return ids.slice(ids.indexOf('window') + 1).filter(notUs); 
} 

function myvars() { 
    function gather(a, i) { a[i] = window[i]; return a; } 
    return myids().reduce(gather, {}); 
} 

을, 그리고 아니, 잘못된 반응 만이 있어야합니다 myvars() 당신이 검사 할 수있는 객체로를 수집하는 반면 myids() 단지, 자신의 이름을 나열 함께 맥락에서 그들 모두를 볼 수 있습니다 위음성.

+0

흥미로운 아이디어. 'window' 객체는 Chrome에서 추가 된 마지막 열거 가능 속성 인'window' 속성 (순환 참조)을 사용한다는 사실을 이용합니다. 순회의 순서는, 프로퍼티가 객체에 추가되는 순서에 근거합니다. 이것은 브라우저마다 다르므로 Chrome에서 상당히 잘 작동하지만 Safari 및 Firefox에서는 많은 중복 속성을 제공합니다. 아직도 꽤 유용하다! –

+0

네, 대부분의 웹 개발 시간을 보내고있는 Chrome DevTools에서 작업을 수행하기에 충분합니다. 공유 할 가치가 있다고 생각했지만 브라우저 개발자는이 해킹 기능이 매우 유용하다는 사실을 알고있을 것입니다. . – ecmanaut

-1

기본적으로이 기능은 하나의 키를 걸러 낼 필요가 있지만 생성 된 키를 하나만 나열하면됩니다 (다른 키를 사용하는 방법은 없습니다). 필터링 할 내용을 알고 싶다면 keys(window)dir(window)을 참조하십시오.

for(var x in window) { 
    if(window.hasOwnProperty(x)) { 
     console.log(x); 
    } 
} 
+0

아니요, 이것은 페이지가로드 된 후 devtools에서 작성된 ID뿐만 아니라 모든 전역 식별자를 나열합니다. – ecmanaut

+0

@ecmanaut devtools는 별도의 네임 스페이스를 사용하지 않습니다. 필터가 필요하다고 말한 반면, 질문 자체는 중복되지만 답변은 부적절합니다. 정확히 네임 스페이스를 사용합니다. 감사합니다. 나를 downvoting - 귀하의 정적 2 vars 꽤 포함하지 않는 동안, 그것은 포함 - 제외되지 ... 그래서 새로운 변수를 정의 할 때 어떻게됩니까 ?? –

+1

이 페이지에서 두 버전을 모두 사용해보십시오. 내가 당신을 시도 할 때 devtools에서 나에 의해 정의되지 않은 224 개의 식별자를 나열한다. 내 목록에 제로. 하나 추가하면 하나가 나열됩니다. 너의 목록 225. 나는 devtools가 별도의 범위를 지키지 않는다는 것을 알고있다. 이 질문은 네가하는 것을 나열하지 않는 방법에 관한 것이다. 귀하의 대답은 다른 질문 http://stackoverflow.com/questions/2934787/view-list-of-all-javascript-variables-in-google-chrome-console에 대한 중복 대답입니다 - 따라서 downvote. – ecmanaut

관련 문제