클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가리킨다.
function outter() { //외부함수
var title = ‘coding everybody’;
function inner() { //내부함수
alert(title);
}
inner();
}
outter();
———————————————————————
function outter() {
var title = ‘coding everybody’;
return function() {
alert(title)(
}
}
var inner = outter();
inner();
위 코드는 실행이 된다!
———————————————————————
<프라이빗 함수 (private method)>
function factory_movie(title) {
return {
get_title : function() {
return title;
},
set_title : function(_title) {
if(typeof _title === ‘String’) {
title = _title
} else {
alert(’제목은 문자열이어야 합니다.‘);
}
}
}
}
ghost = factory_movie(Ghost in the shell’);
matrix = factory_movie(‘Matrix’);
alert(ghost.get_title());
> Ghost in the shell
alert(matrix.get_title());
> Matrix
ghost.set_title(‘공각기동대‘);
alert(ghost.get_title());
> 공각기동대
alert(matrix.get_title());
> Matrix
</프라이빗 함수(private method)>
———————————————————————
<클로저를 사용하면서 자주 일어나는 실수 시정 전>
var arr = []
for(var i = 0; i < 5; i++) {
arr [i] = function() {
return i;
}
}
for(var index in arr) {
console.log(arr[index]());
}
</클로저를 사용하면서 자주 일어나는 살수 시정 전>
<시정 후>
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(arr[index]());
}
</시정 후>
'프로그래밍 언어 > Script' 카테고리의 다른 글
JAVA script 매개변수 (0) | 2022.12.13 |
---|---|
JAVA script arguments (0) | 2022.12.13 |
JAVA script 함수2 (0) | 2022.12.12 |
JAVA script 유효범위 (0) | 2022.12.12 |
JAVA script 정규표현식 옵션 (0) | 2022.12.12 |