자바스크립트 닫기 예

| | | | | | | | | | | | | | | | | | | | | | | | |

자바스크립트에서 가장 큰 비밀번호 중 하나는 종료입니다. FAANG 기업의 면접에서 많은 질문을 받는 인물이다. 이 기사에서는 울타리와 목표에 대해 이야기하고 간단한 예를 통해 개념을 설명한 다음 가장 큰 기술 대기업 중 한 명과의 인터뷰에서 샘플 질문으로 결론을 내릴 것입니다.

누군가가 프로젝트의 일부이거나 일부가 아니라고 말할 때 그것은 무엇을 의미하나요?

저는 잠망경이나 망원경을 생각하고 싶습니다. 이 질문에 대한 답을 생각할 때. 이 도구는 그가 가지고 있는 렌즈의 한계 내에서 모든 종류의 것을 보여줍니다. 그는 현장에 있습니다. 범위를 벗어나면 렌즈의 지름 너머로 볼 수 없습니다. 그리고 직경 밖의 것을 비추는 것은 불가능합니다. JavaScript에서 매우 중요하고 구별되는 세 가지 유형의 범위(로컬, 전역 및 어휘)에 대해 이야기할 때 이에 대해 생각해야 합니다.

로컬 범위

로컬 범위는 다음 중에서 가장 작습니다. 오늘 논의할 세 가지 범위. 함수를 선언할 때 대괄호({})로 묶인 모든 항목은 함수에 대해 로컬로 간주됩니다. JavaScript 엔진은 함수를 읽을 때 변수를 선언합니다. 종료되면 변수를 파괴합니다.

보다시피 "console.log()"가 호출된 인사말 함수의 결과일 때 이후에 WebsiteName에 액세스할 수 있습니다. 기능이 재생되었습니다. 이것은 우리에게 "Hello Karma Career`ù 채널을 제공합니다. 이미 언급했듯이 함수에서 선언된 변수의 console.log() 는 정의할 수 없기 때문에 오류를 생성합니다. .

, WebsiteName이 정의되지 않은 이유는 변수가 호출될 때 함수 내부에서 생성되고 터미널 명령어가 실행될 때 소멸되기 때문입니다. 특정 구성이 있습니다.

전역 범위

이 다음 필드는 이 문구의 거의 문자 그대로의 번역입니다. 전역 범위는 함수 외부에서 선언된 요소를 취하여 공백에 예약합니다. 여기에서 모든 스크립트, 메서드 및 함수는 자체 논리에 액세스하고 사용할 수 있습니다.

console.log()가 코드 끝에서 계산되면 위의 코드는 무엇을 합니까? 어떤 일이 일어나기를 바라는가?

코드를 살펴보겠습니다. .

  1. 변수 카운터 전역 환경에서 선언 및 시작
  2. 전역 환경에서 선언된 함수를 추가했습니다.
  3. Add가 호출됩니다.
  4. 로케일에서 선언되고 시작된 카운터 변수 .
  5. 글로벌이 아니라 로컬이기 때문에 로컬 카운터가 1 증가합니까?
  6. 카운터가 반환됩니다. 함수가 끝납니다.
  7. Add가 다시 호출됩니다.
  8. 4~6단계를 수행합니다.
  9. 3단계를 다시 반복합니다. 6.a
  10. console.log(카운터), ‚áê 무엇이 반환됩니까?

카운터가 1일 때마다 함수가 종료되므로 로컬 카운터 변수가 다시 선언되고 함수가 실행될 때마다 0에서 다시 시작됩니다. 무슨 일이 일어나든 카운터는 항상 로컬에서 1에서 멈춥니다.

함수가 범위 내에서 변수를 찾으면 변수의 전역 범위를 찾지 않으므로 전역 변수는 절대 변경되지 않습니다. 그러면 이 명령어의 환경에서 가장 가깝게 정의된 변수가 전역 환경에 있으므로 console.log()는 0을 생성합니다.

어휘 범위

어휘 범위는 JavaScript의 기본 개념 중 하나입니다. 함수나 변수의 생성은 코드의 특정 부분에 액세스할 수 있고 따라서 코드의 다른 부분에는 액세스할 수 없다는 아이디어입니다. 각 변수와 함수의 선언 위치에 따라 다릅니다.

이 코드 블록을 살펴보겠습니다.

여기에 중첩 함수 세트가 있습니다. init() 함수는 var1이라는 변수를 선언하고 second라는 함수를 선언하고 second()를 호출합니다.

컴파일러가 이 코드를 처음 검토할 때 우리가 가지고 있는 것을 높은 수준에서 검사합니다.

이 시점에서 우리는 init() 내부에서 다른 것을 볼 수 없습니다. 우리는 init() 함수가 호출될 때만 함수가 존재한다는 것을 알고, 컴파일러는 함수 내부에 있는 것을 또 다른 높은 수준으로 살펴봅니다.

  1. var1.
  2. 초()
  3. 초() 호출

init()seconds() 블록 내부에서 무슨 일이 일어나는지 전혀 알지 못합니다. 어휘 환경 - 주변 상태에 있는 것 예를 들어 확실하지 않은 경우 페이지 그들은). 그녀의 인형은 컨테이너 내부에서 무슨 일이 일어나고 있는지, 그리고 부모에게서 이미 일어났거나 읽었거나 읽은 내용을 알고 있습니다. 예를 들어 더 큰 인형은 다음 인형이 컨테이너에 있다는 것만 압니다. 그녀는 세트에 있는 다른 인형은 전혀 모르고, 그녀의 어휘 환경(그녀의 상태)과 이미 일어난 일(외부 영역)에 대해 알지 못합니다.

사실 우리는 두 가지를 알고 있습니다.

  1. 외부 도메인은 내부 도메인을 볼 수 없습니다.
  2. 내부 범위는 외부 도메인에 액세스할 수 있습니다.

외부는 볼 수 없기 때문에 내부에서 진행 중이므로 단방향 관계라고 안전하게 말할 수 있습니다. 내부는 외부에서 변수를 보고 사용할 수 있지만 외부는 내부를 볼 수 없습니다. 이것을 어휘 완결성 이라고 합니다.

어휘 범위의 장점은 변수 값이 코드에서의 배치에 의해 결정된다는 것입니다. . 함수는 먼저 해당 로케일에서 변수의 의미를 찾습니다. 찾을 수 없으면 해당 함수를 정의하는 함수로 이동합니다. 거기에서 찾지 못하면 다음으로 정의된 함수로 체인을 올라갑니다.

이것은 자바스크립트에서 매우 중요한 개념이 되고 있으며, 이는 더 배우면서 계속해서 나올 것입니다. JavaScript 프레임워크 및 작동 방식에 대해 설명합니다. 외부에서 갈 수는 있지만 다른 방향으로 "위로" 올라갈 수는 없습니다. 이는 문제의 주요 주제인 닫기 와 관련하여 매우 중요합니다.

클로저

클로저의 정의는 어휘 범위의 정의와 매우 유사합니다. 둘의 주요 차이점은 클로저는 고차 함수이고 어휘 범위는 그렇지 않습니다. 고차 함수에는 함수를 반환하거나 매개변수로 함수를 사용하는 한 가지 기본 특성이 있습니다.

클로저는 어휘 범위에 도달할 수 있는 함수입니다. 이 함수가 나중에 호출될 때.

클로저와 어휘 범위 모두 고유한 변수를 가지며 상위 함수의 변수와 매개변수에 액세스할 수 있으며 전역 변수를 사용할 수 있습니다. 다음 코드 사용:

  1. Greeting () 함수가 존재하지만 아직 내용을 모릅니다.
  2. greetUser가 존재하지만 그 내용을 아직 모릅니다
  3. greetUser () - 이 줄은 이전 줄을 호출하고 차례로 인사말( ) 함수.
  4. userName 선언
  5. welcomeGreeting()이 존재하지만 아직 내용을 모릅니다
  6. Return 문 welcomeGreeting () 블록 아래에서 동일한 함수를 반환합니다.
  7. console.log (`Hello,` + username) ; 여기에서 console.log는 상위 범위에 액세스하여 userName의 값을 얻을 수 있습니다.
  8. 함수를 종료하고 코드 블록에서 변수의 의미를 파괴하는 터미널 선언
  9. 이 코드에서는 나중에 부모의 쓰레기에 액세스할 수 있도록 함수를 중첩하여 정보를 전달합니다.



    결론

    이 기사에서는 상당히 무거운 JavaScript 주제인 범위와 클로저를 다루었습니다. 나는 분기하여 주제에 대한 여러 기사를 읽는 것이 좋습니다. 이것을 가르치는 방법은 다양한 관점에서 올 수 있습니다. 즉, 물론 배우는 방법이 많다는 의미입니다. 이 알파벳 책이 도움이 되었기를 바랍니다! 폐쇄에 대한 지속적인 연구에 행운을 빕니다!