제가 겪은 작은 문제. 최근에는 익명 함수를 쓰는 걸 좋아하는데, 이걸 처음 봤을 때 습관적으로 보니 obj만 노출되는 줄 알았어요. sayHi는 언제 실행할 수 있나요?
JS의 작동 메커니즘을 이전에 본 적이 있는 것 같았습니다.
이런 경우인지는 모르겠습니다.
js는 실행 시 사전 구문 분석되어야 합니다
그러므로 sayHello를 실행하기 전에 익명 함수의 sayHello는
저는 전문가가 아니어서 이렇게 이해하는 것이 맞는지 모르겠네요?
범위 문제입니다.
으아악함수가 생성될 때 범위를 저장했다는 점만 기억하세요. 나중에 어디에서 호출하든 결과는 코드와 동일하며, 이를 변경해도 결과는 동일합니다( 아래의 쉬운 분석을 위해 즉시 함수 호출 및 이름 지정, 테스트 호출):
분석, obj.sayHello 함수가 생성되면 모든 현재 범위가 저장됩니다.
으아악이때 sayHi 함수는 테스트 범위에 속하므로 이 참조는 sayHello에 직접 저장됩니다. 전역 범위에서 실행하더라도 전역 범위에서 재정의된 sayHi는 여전히 영향을 미칠 수 없습니다. 이는 함수에서 검색하는 테스트에서 나온 것입니다. 다음 예를 보면 이해할 수 있을 것입니다.
으아악foo 함수의 범위는 foo 자체 + 전역 범위이므로 즉시 실행 함수에서 실행하더라도 출력값은 20이 아니고 10만 나옵니다
이것은 좋은 이해가 아닙니다. 종결 개념이어야 합니다. http://www.ruanyifeng.com/blo...
함수에서 변수에 접근할 때 먼저 함수가 변수를 선언하는지 확인하세요. 그렇지 않다면 외부 범위로 이동하여 찾으세요. 여기서는 (function(){})() 함수에서 찾았습니다. sayHi라고 해서 직접 호출했는데, 이때 sayHi가 선언되어 있지 않다면 함수의 외부 레이어에서 계속해서 찾아보면 전체적인 상황은 아직 존재하지 않습니다. 그러면 더 이상은 없을 거예요