javascript - js 익명 함수 관련 문제
怪我咯
怪我咯 2017-07-05 10:50:25
0
2
965
으아악

제가 겪은 작은 문제. 최근에는 익명 함수를 쓰는 걸 좋아하는데, 이걸 처음 봤을 때 습관적으로 보니 obj만 노출되는 줄 알았어요. sayHi는 언제 실행할 수 있나요?
JS의 작동 메커니즘을 이전에 본 적이 있는 것 같았습니다.
이런 경우인지는 모르겠습니다.
js는 실행 시 사전 구문 분석되어야 합니다
그러므로 sayHello를 실행하기 전에 익명 함수의 sayHello는

가 되어야 합니다. 으아악

저는 전문가가 아니어서 이렇게 이해하는 것이 맞는지 모르겠네요?

怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(2)
刘奇

범위 문제입니다.
함수가 생성될 때 범위를 저장했다는 점만 기억하세요. 나중에 어디에서 호출하든 결과는 코드와 동일하며, 이를 변경해도 결과는 동일합니다( 아래의 쉬운 분석을 위해 즉시 함수 호출 및 이름 지정, 테스트 호출):

으아악

분석, obj.sayHello 함수가 생성되면 모든 현재 범위가 저장됩니다.

으아악

이때 sayHi 함수는 테스트 범위에 속하므로 이 참조는 sayHello에 직접 저장됩니다. 전역 범위에서 실행하더라도 전역 범위에서 재정의된 sayHi는 여전히 영향을 미칠 수 없습니다. 이는 함수에서 검색하는 테스트에서 나온 것입니다. 다음 예를 보면 이해할 수 있을 것입니다.

으아악

foo 함수의 범위는 foo 자체 + 전역 범위이므로 즉시 실행 함수에서 실행하더라도 출력값은 20이 아니고 10만 나옵니다

刘奇

이것은 좋은 이해가 아닙니다. 종결 개념이어야 합니다. http://www.ruanyifeng.com/blo...

함수에서 변수에 접근할 때 먼저 함수가 변수를 선언하는지 확인하세요. 그렇지 않다면 외부 범위로 이동하여 찾으세요. 여기서는 (function(){})() 함수에서 찾았습니다. sayHi라고 해서 직접 호출했는데, 이때 sayHi가 선언되어 있지 않다면 함수의 외부 레이어에서 계속해서 찾아보면 전체적인 상황은 아직 존재하지 않습니다. 그러면 더 이상은 없을 거예요

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