2012-03-16 9 views
7

을 삭제해야합니다 : 속성 만이속성 만 나는 JSLint이 오류를 받고 있어요

을 삭제해야 할 이유는 다음과 같이하지 그것을합니까? 삭제하려고 시도하는 변수가 너무 커서 가비지 수집을 뛰어 넘기를 바랬습니다. 안 괜찮아?

+3

변수는 삭제할 수 없으며 개체 속성 만 삭제할 수 있습니다. 그러므로 'var a = 5; delete ;;는 오류를 던지지 않으며 (* strict 모드 *에서 실제로), 아무 것도하지 않습니다 ('delete a;'false'를 반환합니다). 그래서 : 그것은 유효한 코드이지만, 당신이 원하는 것을하지 않습니다, 그래서 그것은 혼란 스럽습니다. –

+0

@FelixKling 아니, 그건 사실이 아니야. 사실 삭제 연산자로 변수를 삭제할 수 있습니다. 테스트 코드를 작성하고 실행할 수 있습니다. 'var a = 11; 경고 (삭제 a); alert (typeof); 은 true 및 "undefined"를 경고합니다. – cuixiping

+3

@cuixiping 펠릭스 클링이 옳다. 'delete'를 사용하여 (로컬) 변수를 삭제할 수 없습니다. 전역 변수는 실제로'window' 객체에 첨부 된 속성이기 때문에 다릅니다. – NullUserException

답변

11

delete은 일반 변수 (VariableObject의 속성)가 아니라 개체의 속성을 삭제합니다.

대신 모든 값을 null으로 설정할 수 있습니다. 자바 스크립트의 GC는 필요할 때 정리할 것입니다.

2

그냥 jslint 경고를 제거하려는 경우, 당신이 시도 할 수 있습니다 : 모든 글로벌 변수는 실제로는 전역 객체의 속성 때문에

var myHugeVariable = ...; 

// do stuff with huge variable 

delete window.myHugeVariable; 

이 작동합니다.

+0

지역 변수는 어떻게됩니까? ;) –

+0

@FelixKling 좋은 질문입니다. 나는 어디에서나 선언 된 모든 변수가 어떤 객체의 속성이어야한다는 것을 70 % 확신한다. 그것은 그들이 존재하는 객체를 알아내는 것일 뿐이다. – jbabey

+0

@jbabey 일반 변수는 JavaScript API에 공용 인터페이스가없는 실행 컨텍스트의 VariableObject 속성입니다. 필자의 스펙에 대한 나의 기억은 적어도 다음과 같다 : P – alex

1

일반적으로 변수를 공개 할 필요가 없습니다. 자바 스크립트 엔진은 자동으로 그 일을합니다.

또는 jslint check를 전달할 수 있도록 변수를 undefined로 설정할 수 있습니다.

var a=11; 
a = undefined; 

권장하지 않습니다.

관련 문제