질문 : 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.1 및 10.2.2.1에 자세히 설명 됨)를 찾습니다. 최상위 수준 LexicalEnvironment 는 " 전역 환경 "이며 참조가 전역 객체의 속성이라는 점에서 전역 객체에 바인딩됩니다. 따라서 현재 범위 또는 외부 범위에서 var
키워드를 사용하여 선언되지 않은 이름에 액세스하려고하면 Javascript는 결국 해당 참조 역할을 할 window
이전에 배운 것처럼 객체의 속성을 삭제할 수 있습니다.
var
선언은 "hoisted"라는 것을 기억하는 것이 중요합니다.var
문에서 수행 할 수있는 값 초기화는 아니지만 항상 해당 범위의 시작 부분에서 발생한 것으로 간주됩니다. 그것은. 따라서 다음 코드에서a
window
속성이 아니라 VariableEnvironment 의 참조이며 코드 끝에서10
function test() { a = 5; var a = 10; }
- 위의 설명은 "엄격 모드"가 활성화되지 않은 경우입니다. "엄격 모드"를 사용할 때 조회 규칙이 약간 다르며 "엄격 모드"없이 창 속성으로 해석 될 어휘 참조는 "엄격 모드"에서 "선언되지 않은 변수"오류를 발생시킵니다. 나는 이것이 어디에 지정되어 있는지 실제로 이해하지 못했지만 브라우저가 어떻게 작동하는지 이해했습니다.
출처 : https://stackoverflow.com/questions/1596782/how-to-unset-a-javascript-variable
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
JS 또는 jQuery로 ESC키를 감지하는 방법 (0) | 2021.10.15 |
---|---|
JavaScript "null coalescing" 연산자 (0) | 2021.10.15 |
PHP로 JSON 보기 좋게 출력하는 방법 (0) | 2021.10.15 |
module.exports vs Node.js exports (0) | 2021.10.15 |
AngularJS 템플릿의 if else 문 (0) | 2021.10.14 |