#내부함수에서 외부함수의 변수 사용 예제
function outter(){
var title = 'coding everybody';
function inner(){
console.log(title);
}
inner();
}
outter();
#외부함수를 사용하지 않을 때 (외부함수가 죽었을 때) 내부함수에서의 외부함수 사용 예제
function outter(){
var title = 'coding everybody';
return function(){
console.log(title);
}
}
var inner = outter();
inner();
#private variable
: 정의한 함수내 요소들을 다른 사용자 또는 함수가 변경할 수 없게 하는 방법
function factory_movie(title){
return {
get_title : function (){
return title;
},
set_title : function (_title){
title = _title;
}
}
}
ghost = factory_movie('Ghost in the shell'); → 각 ghost, matrix변수에 factory~함수 저장
matrix = factory_movie('Matrix');
console.log(ghost.get_title());
console.log(matrix.get_title());
ghost.set_title('공각기동대'); → ghost에 저장된 함수의 title값만 변경
console.log(ghost.get_title());
console.log(matrix.get_title());
※ ghost의 title 값만 '공각기동대'로 변경됨 (matrix는 그대로 'Matrix')
#closure 실패 예제
var arr = []
for(var i = 0; i < 5; i++){
arr[i] = function(){
return i;
}
}
for(var index in arr){
console.log(arrindex);
}
#상기 closure예제 수정
var arr = []
for(var i = 0; i < 5; i++){
arr[i] = function(id){
return function(){
return id;
}
}(i);
}
for(var index in arr){
console.log(arrindex);
}