2016-08-10 6 views
1

나는 Douglas Crockford의 JavaScript 강의 시리즈를 진행 중입니다. 나는 그가 '폐쇄'를 설명하기 위해 보여주는 코드 예제에 의해 혼란 스러워요 :JavaScript 클로저 : 함수 반환

var digit_name = (function() { 
 
    var names = ['zero', 'one', 'two', 'three']; 
 
    
 
    return function (n) { 
 
    return names[n]; 
 
    }; 
 
    
 
}()); 
 

 
alert(digit_name(3));

어떻게

/digit_name 매개 변수가 정의에 지정되지 않은 인수 (가장 바깥쪽에있는 기능)을 수행 할 수있는 이유 ? 인수 (이 경우 3)는 호출하는 동안 내부 함수 정의 내에서 n에 해당하는 것을 어떻게 알 수 있습니까?

+0

정의되면 IIFE입니다. – gcampbell

답변

2

digit_name 점포 내 기능은 하나 개의 파라미터에 서명을 가지고 있으며, 즉 digit_name에 저장된 무엇 즉시 실행 함수식 인 외부 기능에 의해 내부 기능 return ED.

function (n) { 
    return names[n]; 
} 

는 궁극적 위 digit_name되고 namesdigit_name의 환경과 함께 제공되는 전용 변수이다. 개인 변수의 개념은 클로저를 사용할 때만 가능합니다.

은 분명히이 볼 수 있도록하려면

enter image description here

0

은 자동 호출, 익명 함수 Theres는 (함수() {})(). 그래서 digit_name는 함수가 아닙니다 그것의 기능 출력이 브라우저 내에서 발생 statement.So을 반환 무엇 :

var digit_name=(function(){})(); 
var digit_name=function(n){} 
0

외부 함수는 인생, 즉시-호출 기능의 표현이다. 이 함수는 스크립트가 시작될 때 실행되므로 IIFE에서 반환 한 내부 함수는 digit_name에 할당 된 것입니다.

이 내부 기능이 클로저의 모든 항목 (예 : 이름 배열)에 여전히 액세스 할 수있는 경우 클로저의 "마법"입니다.

https://developer.mozilla.org/en-US/docs/Glossary/IIFE

+0

... 내부 함수는 매개 변수를 취하는 함수를 반환합니다. –

+0

예, 내부 함수가 반환 된 함수임을 지정 했어야합니다. –

관련 문제