다음 코드는 어떻게 작동합니까? 함수는 컴파일러가 아직 도달하지 않은 표현식에서 함수를 어떻게 호출 할 수 있습니까? 에 도달하기 전에 (function def(...)
에 도달했습니다. 이 점에 대해 내가 잘못 생각한 곳은 어디인가? 고맙습니다.범용 모듈 정의 IIFE 패턴
var a = 2;
(function IIFE(def){
def(window);
})(function def(global){
var a = 3;
console.log(a); // 3
console.log(global.a); // 2
});
'def '함수에 도달하기 전에'def (window)'에 도달하지 않습니다. IIFE의 두 번째 괄호 집합 (함수를 둘러싸 지 않는 두 번째 집합)은 매개 변수입니다. 'def' 함수는'IIFE' 함수가 호출되기 전에'IIFE' 함수의 매개 변수로 파싱됩니다. 그래서'IIFE' 함수는 파싱되고 (호출되지 않음),'def' 함수 매개 변수는 파싱됩니다 (호출되지 않습니다),'def' 함수 매개 변수는'IIFE' 함수 (현재 호출되고 있습니다)에 전달되고' def (window)'문이 실행됩니다 ('def' 함수 호출). 적어도 그것이 어떻게 작동하는지에 대한 나의 이해입니다. – War10ck
인수는 항상 * 먼저 평가되고 * 결과는 함수에 전달됩니다. 그래서 여기에서,'function def (global) {...}'는'def '를 통해 인수에 접근하는 함수에 전달되는 인수입니다. –