JavaScript 클로저는 어떻게 작동하나요?
P粉494151941
P粉494151941 2023-08-22 10:16:45
0
2
490
<p>JavaScript 클로저(예: 함수, 변수 등)의 개념을 이해하지만 클로저 자체는 이해하지 못하는 사람에게 클로저를 설명하는 방법은 무엇입니까? </p> <p>Wikipedia에 제공된 Scheme 예제를 살펴봤지만 불행히도 도움이 되지 않았습니다. </p>
P粉494151941
P粉494151941

모든 응답(2)
P粉734486718

JavaScript에서 각 함수는 외부 어휘 환경에 대한 링크를 유지합니다. 어휘 환경은 범위 내의 모든 이름(예: 변수, 매개변수)과 해당 값의 맵입니다.

따라서 function 키워드를 볼 때마다 해당 함수 내부의 코드는 함수 외부에 선언된 변수에 액세스할 수 있습니다.

으아아아

이것은 16,因为函数 bar 闭包了参数 x 和变量 tmp,它们都存在于外部函数 foo의 어휘 환경을 출력합니다.

함수 bar 与其与函数 foo의 어휘 환경은 서로 연결되어 클로저를 형성합니다.

함수는 클로저를 생성하기 위해 return 을 필요로 하지 않습니다. 선언만으로 각 함수는 둘러싸는 어휘 환경을 둘러싸서 클로저를 형성합니다.

으아아아

위 함수는 더 이상 범위에 직접적으로 포함되지 않더라도 bar 中的代码仍然可以引用参数 x 和变量 tmp때문에 16을 출력합니다.

그러나 tmp 仍然存在于 bar 的闭包中,它可以被递增。每次调用 bar부터는 모두 증가됩니다.

클로저의 가장 간단한 예는 다음과 같습니다.

으아아아

JavaScript 함수가 호출되면 새로운 실행 컨텍스트가 생성되고 ec。除了函数参数和目标对象之外,该执行上下文还接收到调用执行上下文的词法环境的链接,这意味着在外部词法环境中声明的变量(在上面的示例中,即 ab)可以从 ec 그 안에서 액세스됩니다.

모든 함수에는 외부 어휘 환경에 대한 링크가 있으므로 모든 함수는 클로저를 생성합니다.

클로저에 보이는 것은 복사본이 아닌 변수 자체라는 점에 유의하세요.

P粉904405941

클로저는 다음을 쌍으로 구성합니다.

  1. 함수와
  2. 함수의 외부 범위(어휘적 환경)에 대한 참조

어휘적 환경은 모든 실행 컨텍스트(스택 프레임)의 일부이며 식별자(예: 지역 변수 이름)와 값 간의 매핑입니다.

JavaScript의 모든 함수는 외부 어휘 환경에 대한 참조를 유지합니다. 이 참조는 함수가 호출될 때 생성되는 실행 컨텍스트를 구성하는 데 사용됩니다. 이 참조를 사용하면 함수가 호출되는 시기와 위치에 관계없이 함수 내부의 코드에서 함수 외부에 선언된 변수를 "볼" 수 있습니다.

다른 함수에서 함수가 호출되면 외부 어휘 환경에 대한 일련의 참조가 생성됩니다. 이 체인을 범위 체인이라고 합니다.

아래 코드에서 inner与调用foo时创建的执行上下文的词法环境形成了闭包,闭包包含变量secret:

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿