함수 매개변수의 기본값이 함수인 상황에 대해 헷갈림이 많습니다
예를 들어
Ruan Yifeng의 ES6 소개에 따르면 함수 매개변수가 기본값인 경우 매개변수를 먼저 래핑하는 블록 수준 범위가 있고 초기화가 완료된 후에 블록 수준 범위가 사라진다는 것을 알고 있습니다
매개변수의 기본값이 설정되면, 함수가 선언되고 초기화될 때 매개변수는 별도의 범위(컨텍스트)를 형성합니다. 초기화가 완료되면 이 범위는 사라집니다. 이 구문 동작은 매개변수 기본값이 설정되지 않은 경우 나타나지 않습니다.
기본값이 일반 변수인지는 이해할 수 있지만 여기서 출력이 내부가 아닌 외부인 이유는 아직도 이해가 되지 않습니다
한마디로 함수의 클로저는 실행될 때가 아니라 정의될 때 형성됩니다.
구문적 설탕을 철저하게 확장하면 더 명확하게 볼 수 있습니다
으아악보세요,
fk_compiler
里是不是只能返回外部作用域下的foo
?js는 어휘 범위이며 foo의 값은 함수가 실행될 때가 아니라 함수가 정의될 때 값을 가져옵니다.
응답자 코드 기준:
으아악fk_compiler
被声明的作用域在全局,所以,它会去访问全局作用域中的foo
. 답이 나올 것입니다.비슷한 코드:
으아악