자바스크립트 범위.
스코프란?
모든 프로그래밍 언어에서 변수를 저장하기 위한 잘 정의된 규칙 집합을 범위라고 합니다.
이제 범위가 무엇인지 알았습니다. 잠시 멈추고 위의 줄을 다시 읽으십시오. 프로그래밍 언어에서 변수가 필요한 이유를 알 수 있습니까? Hello World 프로그램을 작성한 후 매일 변수를 사용하지만 왜? 인생은 변수 없이 매우 단순했는데 왜 우리에게 이러한 복잡성이 필요합니까?
모든 프로그래밍 언어의 가장 중요한 패러다임 중 하나는 변수를 선언하고 나중에 해당 값을 검색하고 수정하는 기능입니다. 이 기능은 프로그램에 상태를 제공합니다.
범위를 이해하기 위해 먼저 컴파일러가 작동하는 방식을 살펴보겠습니다.
컴파일러 이론.
JavaScript는 컴파일된 언어가 아니라 해석된 언어입니다. C++ 또는 Java와 같은 프로그램은 실행하기 전에 컴파일해야 합니다. 소스 코드는 컴파일러라는 프로그램을 통해 전달되며, 컴파일러는 이를 기계가 이해하고 실행할 수 있는 바이트 코드로 변환합니다. 대조적으로 JavaScript에는 컴파일 단계가 없습니다. 대신 브라우저의 인터프리터가 JavaScript 코드를 읽고 각 줄을 해석하고 실행합니다. 최신 브라우저는 JIT(Just-In-Time) 컴파일이라고 하는 기술을 사용합니다. 이 컴파일은 실행 직전에 JavaScript를 실행 가능한 바이트 코드로 컴파일합니다.
다음 진술을 고려하십시오.
var x = 100;
JavaScript 코드를 실행하기 위해 이러한 구성 요소는 중요한 역할을 합니다.
JavaScript는 컴파일된 언어가 아니라 해석된 언어입니다. C++ 또는 Java와 같은 프로그램은 실행하기 전에 컴파일해야 합니다. 소스 코드는 컴파일러라는 프로그램을 통해 전달되며, 컴파일러는 이를 기계가 이해하고 실행할 수 있는 바이트 코드로 변환합니다. 대조적으로 JavaScript에는 컴파일 단계가 없습니다. 대신 브라우저의 인터프리터가 JavaScript 코드를 읽고 각 줄을 해석하고 실행합니다. 최신 브라우저는 JIT(Just-In-Time) 컴파일이라고 하는 기술을 사용합니다. 이 컴파일은 실행 직전에 JavaScript를 실행 가능한 바이트 코드로 컴파일합니다.
다음 진술을 고려하십시오.
var x = 100;
JavaScript 코드를 실행하기 위해 이러한 구성 요소는 중요한 역할을 합니다.
var x =100;
컴파일러는 렉싱을 수행하여 토큰으로 분해한 다음 트리로 구문 분석합니다.컴파일러는 다음과 같이 진행할 것입니다.
엔진에 대해 알기
코드를 실행하는 동안 엔진은 범위에서 x가 선언되었는지 여부를 확인해야 합니다. 이 경우 엔진은 LHS LOOKUP을 수행하고 엔진이 x에 100을 할당해야 할 때 RHS LOOKUP을 수행합니다.
더 명확하게하기 위해 예를 고려해 보겠습니다.
function PrintX(x){
console.log(x);
}
PrintX(100);
이 코드가 엔진에 의해 실행될 때 다음 단계가 발생합니다.
- Engine will tell scope that it has a RHS reference to PrintX ,
- Scope will answer that exist in the scope and it is a function
- Engine will execute the function PrintX(), again Engine will ask compiler that it has a LHS reference for x with value 100.
- scope will say that compiler declared a formal parameter to the function PrintX.
- Engine will assign 100 to x.
- Engine will again ask scope that it has a RHS look for X.
- Scope will say it has a variable x.
- Then the
console.log(x)
will be executed and result100
.
중첩 범위
범위가 현재 범위에서 변수/식별자를 찾을 수 없으면 범위를 위로 이동하여 확인하고 전역 범위에 도달할 때까지 계속하고 특정 식별자를 얻지 못하면 오류가 발생합니다!
중첩된 범위 확인 프로세스를 시각화하기 위해 1층은 현재 범위가 현재 있는 위치인 다층 건물을 고려합니다. LHS/RHS 조회가 발생하고 식별자를 찾을 수 없다고 가정하고 엘리베이터를 다음 층으로 이동하고 그곳에서 검색합니다. 최상층은 글로벌 상태가 사는 곳입니다.
엔진이 LHS 조회를 수행하고 있고 찾지 못하고 전역 저장소에 도착하면 전역 범위 변수를 생성하게 됩니다. 이를 피하기 위해 "strict 모드"를 사용합니다.
감사합니다!
Reference
이 문제에 관하여(자바스크립트 범위.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amankumarsingh01/javascript-scopes-l0j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)