프로그래밍 언어/HTML,CSS,JS

JavaScript 변수를 설정 해제하는 방법

Rateye 2021. 10. 15. 10:45
728x90
반응형
질문 : JavaScript 변수를 설정 해제하는 방법은 무엇입니까?

이미 이전 스크립트로 채워진 JavaScript (실제로는 window 속성이지만 중요하지 않다고 생각합니다)에 전역 변수가 있지만 나중에 실행될 다른 스크립트가 그 값을 보거나 심지어 정의됩니다.

나는 some_var = undefined typeof some_var == "undefined" 테스트 목적으로 작동하지만 실제로 그것에 대해 올바른 방법이라고 생각하지 않습니다.

어떻게 생각해?

답변

delete 연산자는 객체에서 속성을 제거합니다. 변수를 제거 할 수 없습니다. 따라서 질문에 대한 답은 전역 변수 또는 속성이 정의 된 방식에 따라 다릅니다.

var 로 생성 된 경우 삭제할 수 없습니다.

예를 들면 :

var g_a = 1; //create with var, g_a is a variable 
delete g_a; //return false
console.log(g_a); //g_a is still 1

var 없이 생성 된 경우 삭제할 수 있습니다.

g_b = 1; //create without var, g_b is a property 
delete g_b; //return true
console.log(g_b); //error, g_b is not defined

이 경우 참조 g_a 는 ECMAScript 사양 이 현재 범위에 첨부 된 "VariableEnvironment var 를 사용하는 경우 함수 실행 컨텍스트 일 수 있습니다 (약간 얻을 수 있음). let )을 고려할 때 더 복잡하거나 "전역"코드의 경우 VariableEnvironment 가 전역 객체 (종종 window )에 첨부됩니다.

VariableEnvironment의 참조는 일반적으로 삭제할 수 없습니다. ECMAScript 10.5 에 자세히 설명 된 프로세스는이를 자세히 설명하지만 코드가 eval 컨텍스트 (대부분의 브라우저 기반 개발 콘솔에서 사용)에서 실행되지 않는 한 다음으로 선언 된 변수로 충분합니다. var 는 삭제할 수 없습니다.

var 키워드를 사용하지 않고 이름에 값을 할당하려고 할 때 Javascript는 ECMAScript 사양에서 "LexicalEnvironment "라고 부르는 참조에서 명명 된 참조를 찾으려고 시도하며 주요 차이점은 LexicalEnvironment 가 중첩된다는 것입니다. 즉 LexicalEnvironment 에는 부모가 있습니다. (ECMAScript 사양에서 "외부 환경 참조"라고 부르는 것) Javascript가 LexicalEnvironment 에서 참조를 찾지 못하면 상위 LexicalEnvironment (10.3.110.2.2.1에 자세히 설명 됨)를 찾습니다. 최상위 수준 LexicalEnvironment 는 " 전역 환경 "이며 참조가 전역 객체의 속성이라는 점에서 전역 객체에 바인딩됩니다. 따라서 현재 범위 또는 외부 범위에서 var 키워드를 사용하여 선언되지 않은 이름에 액세스하려고하면 Javascript는 결국 해당 참조 역할을 할 window 이전에 배운 것처럼 객체의 속성을 삭제할 수 있습니다.

  1. var 선언은 "hoisted"라는 것을 기억하는 것이 중요합니다. var 문에서 수행 할 수있는 값 초기화는 아니지만 항상 해당 범위의 시작 부분에서 발생한 것으로 간주됩니다. 그것은. 따라서 다음 코드에서 a window 속성이 아니라 VariableEnvironment 의 참조이며 코드 끝에서 10
    function test() { a = 5; var a = 10; }
  2. 위의 설명은 "엄격 모드"가 활성화되지 않은 경우입니다. "엄격 모드"를 사용할 때 조회 규칙이 약간 다르며 "엄격 모드"없이 창 속성으로 해석 될 어휘 참조는 "엄격 모드"에서 "선언되지 않은 변수"오류를 발생시킵니다. 나는 이것이 어디에 지정되어 있는지 실제로 이해하지 못했지만 브라우저가 어떻게 작동하는지 이해했습니다.

 

 

출처 : https://stackoverflow.com/questions/1596782/how-to-unset-a-javascript-variable
728x90
반응형