JavaScript의 범위 체인은 함수가 정의될 때 결정됩니까, 아니면 호출될 때 결정됩니까?
欧阳克2017-07-05 10:42:15
0
5
1071
다음 폐쇄 문제를 보세요
으아아아
출력값이 20이 아니라 10입니다. x가 값을 가져오면 스코프 체인을 따라 조회되지 않나요? 함수 생성 시 스코프 체인이 결정되면 결과는 10이 됩니다. 함수가 호출되면 20이어야 합니다. 예 범위 체인에 대한 정확한 설명이 없습니까? 여기서 정확한 범위 체인은 어떤 모습이어야 합니까? fn과 show는 동일한 수준에 있습니까, 아니면 fn이 show 내에 있습니까?
함수 내에 정의된 변수는 함수 외부 어디에서나 액세스할 수 없습니다. 변수는 함수 도메인 내부에서만 정의되기 때문입니다. 따라서함수는 해당 범위 내에 정의된 모든 변수 및 함수에 액세스할 수 있습니다. 즉, 전역 범위에 정의된 함수는 전역 범위에 정의된 모든 변수에 접근할 수 있습니다. 다른 함수 내에 정의된 함수는 상위 함수에 정의된 모든 변수와 상위 함수가 액세스할 수 있는 다른 모든 변수에도 액세스할 수 있습니다.
함수가 생성될 때 전역 변수 개체를 포함하는 범위 체인을 생성하고 내부 [[Scope]] 속성에 저장합니다. 함수가 실행되면 [[Scope]] 속성의 개체를 복사하여 실행 환경의 범위 체인이 구축되고 자체 활성 개체가 프런트 엔드로 푸시됩니다. 완전한 기능을 구성하는 범위 체인. [[Scope]]는 값의 복사본이 아닌 전역 변수에 대한 참조를 보유합니다.
스코프 체인은 함수가 정의될 때 결정됩니다.
https://developer.mozilla.org...
스코프 체인은 동적이므로 호출 시 결정됩니다.
그러나 코드에서 클로저로 정의된 function()은 바인딩의 가장 바깥쪽 범위입니다.
함수로 선언된 함수는 기본적으로 바인딩의 가장 바깥쪽 범위로 설정됩니다.
(저도 배우고 있어요...)
함수가 생성될 때 전역 변수 개체를 포함하는 범위 체인을 생성하고 내부 [[Scope]] 속성에 저장합니다. 함수가 실행되면 [[Scope]] 속성의 개체를 복사하여 실행 환경의 범위 체인이 구축되고 자체 활성 개체가 프런트 엔드로 푸시됩니다. 완전한 기능을 구성하는 범위 체인. [[Scope]]는 값의 복사본이 아닌 전역 변수에 대한 참조를 보유합니다.
으아악클로저 호출 방법은 다음과 같은 효과가 있습니다. 아래 예제에서는 함수 정의 시 스코프 체인이 위치와 관련되어 있음을 비교하여 보여줍니다.
으아악관련 질문 링크가 추가되었습니다. /q/10… 범위 체인에 대한 토론이 있습니다.
비엄격 모드에서 모든 IIFE의 이 지점은 창입니다
위 내용은 정확하지 않습니다. . .