범위 - JavaScript 개념
5680 단어 scopejavascriptbeginners
Originally written on my blog with interactive examples
이 부분은 범위와 상응한다.
범위
변수의 범위는 무엇입니까?
프로그래밍의 범위는 가시성과 사용률을 대표한다.명백한 원인 때문에 (그러나 우리는 여전히 이러한 원인을 토론할 것이다) 프로그램의 모든 변수가 전역 변수라는 것을 허용할 수 없다.범위란 변수가 특정 범위 내에서 사용되는 것을 제한하는 범위를 가리킨다.
왜 범위 변수입니까?
1. 회피
우리는 같은 명칭으로 두 변수를 성명할 수 없다.이것은 인용 오류를 던질 것이다.
var length = 1;
// some operation going on, after sometime you think
var length = 1; // Nope!`}
그러나 우리는 절대로 서로 다른 목적을 위해 같은 변수를 사용할 수 없다.경계가 없다면 코드를 읽는 사람들은 곤혹스러울 것이다.팀에 사람이 많을 때 문제는 더욱 커진다.다른 사람이 이미 변수를 성명했는지 누가 알겠는가?변수에 대한 접근 권한을 명확하게 제한하면 프로젝트의 모든 개발자가 충돌을 피하기 쉽다.
2. 쓰레기 수집
우리가 변수의 사용을 완성할 때, 우리는 이 변수와 저장된 데이터가 쓰레기로 수집되기를 바란다.동적 언어에서, 우리는 이것이 자동으로 발생하기를 바란다.그러나 만약 우리가 변수가 접근할 수 있는 위치에 대해 아무런 경계가 없다면 컴파일러는 쓰레기를 언제 수집하는지에 대한 어떠한 힌트도 없을 것이다.이 가능하다, ~할 수 있다,...
변수가 접근할 수 있는 곳에 명확한 경계가 있으면 컴파일러에게 이 범위가 끝날 때 쓰레기가 이 변수를 수집하는 것이 안전하다는 것을 알려줄 수 있다.
3. 소유권
만약 우리의 모든 변수가 전체 변수라면, 이것은 누구든지 그것들을 바꿀 수 있다는 것을 의미한다.
예를 들어, 하나의 유지보수 프로젝트에서, 나는 이벤트를 응용 프로그램 자체의 다른 부분으로 방송하기 위해 Custom Event을 만들어야 한다.그러나 내가 무엇을 하든지 간에 나는 맞춤형 활동을 시작할 수 없다.발생한 일은 다른 사람들이 이미
CustomEvent
류(그들은 Event
류를 맞춤형으로 만들려고 한다, 이렇게 하자!)전 세계의 창구에서, 그것은 나의 해석을 능가한다.다른 사람(git 탓)을 제외하고는 자바스크립트에 실제로 CustomEvent
이라는 함수가 존재하는지도 모른다.이런 상황은 변수에서 발생하고 운행할 때 무작위로 발생한다고 상상해 보세요.만약 우리가 확실히 우리가 작성한 변수와 함수에 대해 어떤 소유권을 가지고 있다면 이런 상황이 발생할 것이다.
JavaScript에는
기능 범위
함수 작용역은 어떤 성명된 변수도 함수에서 사용할 수 있음을 의미한다.이 점은 자고로 존재하며 자바스크립트에서 널리 사용되고 있다.
function action() {
var a = 2;
... // actions
// a can be accessed anywhere in this function.
}
크레인
JavaScript는 변수를 선언하는 위치에 관계없이 해당 변수의 역할 영역 상단으로 계속 올립니다.하지만 여기서 의미를 정확히 하라.JavaScript는 변수를 물리적으로 이동하지 않으며 모든 코드가 변경되지 않습니다.컴파일러는 현재 역할 영역에서 변수를 선택하고 컴파일러를 할 때
undefined
의 값으로 변수를 설명합니다.function init() {
console.log(a);
var a = 1;
}
init();
성명 전에 변수를 방문해 undefined
을 얻는 것이 답이다.너는 샹들리에를 두려워할 필요가 없다.사실hositing은 당신이 필요한 순서에 따라 함수를 설명하는 것을 도울 수 있습니다.컴파일러가 어떻게든 꼭대기까지 끌어올리기 때문에 어떤 순서로 설명하는지는 중요하지 않다.그러나
var
으로 성명된 변수는 짧고 정확한 함수를 작성하는 것이 중요하다.또한, 성명만 걸려 있으며, 초기화하기 전에 사용하면 아무런 가치도 없습니다.
블록 범위
이것은 ES6에서 널리 사용되고 있다.블록은 프로그램의
{}
을 가리킨다.블록 범위는
{}
에 정의된 변수는 그 내부에서만 사용할 수 있음을 의미한다.let
또는 const
을 사용하여 변수를 블록 범위에 넣을 수 있습니다.함수도 블록 범위를 구성한다는 것을 주의하십시오.
function action(limit) {
const a = 10; // a can only be used inside this function
if (a < limit) {
const b = a + 2; // b can only be used inside this if block, a can also be used here as this block is inside the execution context of a's block
return b;
}
}
크레인
조립은 블록 범위 내에서 발생합니까?그래.그러나 만약 우리가 실제 성명을 하기 전에 변수를 사용하려고 시도한다면 우리는
ReferenceError
을 얻을 것이다.이것은 무의미하다.만약 그것들이 매달린다면, 그것들은 정의되어야 하지 않습니까?
이 문제를 해결하기 위해 JavaScript 규범은 일시적 사구(Temperal Dead Zone, TDZ)라는 것을 정의했다.이것은 메모리 (기억: 향상은 컴파일러가 변수를 메모리에 넣는 것일 뿐) 와 코드에서 실제 설명하는 차이입니다.TDZ의 블록 범위 변수에 액세스하면
ReferenceError
이 표시됩니다.이것은 내가 코드를 쓰는 방식을 바꿀 수 있습니까?
그래야지.작용역과 클로즈업은 이 언어의 가장 중요한 초석 중의 하나이다.그것도 언어와 성명에 대한 당신의 견해에 영향을 줄 수 있다.
제가 뭘 놓쳤나요?무슨 일이야?좋은 물건이 있습니까?나를 속이다
Reference
이 문제에 관하여(범위 - JavaScript 개념), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/boywithsilverwings/scopes-and-closures-javascript-concepts-4dfj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)