반응형
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 코로나19
- jQuery
- dunk high
- Dunk Low
- JavaScript
- 덩크로우
- Python
- Linux
- 리액트
- 주식
- dunklow
- sacai
- Nike
- 드로우
- 리눅스
- oracle
- 나이키
- stockx.com
- 주식공부
- 제이쿼리
- 덩크 로우
- 파이썬
- 자바스크립트
- Github
- 오라클
- 발매예정
- draw
- GIT
- react
- 덩크 하이
Archives
- Today
- Total
Life goes slowly...
[Js] 자바스크립트의 클로저( Closure) 본문
728x90
반응형
자바스크립트 클로저(Closure)
클로저 = 함수 + 함수를 둘러싼 환경(Lexical environment)
클로저(Closure)는 독립적인 변수를 가리키는 함수라고 MDN 웹 문서 사이트에서는 정의되어 있습니다.
자바스크립트의 함수 내부에 함수를 작성을 할 때 그 내부에 생성된 함수를 클로저(Closure)라고 합니다. 차후에 외부 함수의 변수를 사용 가능하도록 하기 위해서 반환하여 사용하는 것이 대부분입니다.
자바스크립트의 클로저에는 세 가지 스코프가 있습니다.
- 지역내의 지역 범위 (Local Scope)
- 지역외의 외부 함수 범위 (Outer Functions Scope)
- 전체지역의 전역 범위 (Global Scope)
클로저(Closure)에 대해서 세 가지 범위, 스코프에 모두 접근은 가능하지만. 중첩된 내부 함수가 있는 경우 종종 착각을 하는 경우가 있습니다.
function count() {
// 자유변수
var cnt = 0;
// 클로저 함수
function addCount() {
cnt++;
return cnt;
}
return addCount;
}
var increase = count();
console.log("1.count :: ", increase());
console.log("2.count :: ", increase());
console.log("3.count :: ", increase());
"1.count :: ", 1
"2.count :: ", 2
"3.count :: ", 3
클로저(Closure) 사용하는 목적
자바스크립트의 관계있는 변수와 기능을 하나의 함수로 묶어서 독립적으로 실행시킬 수 있다는 점에 있습니다. 자바스크립트 함수 내부에 데이터가 만들어지기 때문에 함수 외부에서 수정할 수 없도록 보호된 데이터를 생성이 가능합니다. (보호된 데이터를 만드는 것을 Private 데이터라고 합니다.)
클로저(Closure) 사용 시 유의사항
1. 하나의 클로저가 여러 함수 객체의 범위, 스코프 체인에 들어가 있는 경우 유의해야 합니다.
자바스크립트 반환되는 객체에 2개의 함수가 정의되어 있는데, 두 함수 모두 자유 변수를 참조하여 두 개의 함수를 호출 시 값이 변화되므로 이점에 유의해야 합니다.
function func(){
var x= 1;
return {
func1 : function(){
console.log(++x);
},
func2 : function(){
console.log(-x);
}
};
};
var exam = func();
exam.func1();
exam.func2();
2
-2
2. 클로저(Closure)의 property 값을 사용하기 가능하여 그 값이 여러 번 호출로 변할 수 있음을 유의해야 합니다.
function func(argNum){
var num = argNum;
return function(x){
num += x;
console.log("num :" + num);
}
};
var exam = func();
exam(5);
exam(-10);
3. 반복문 안에서 클로저(Closure)를 활용할 때 주의해야 합니다.
function func(argNum){
for(var i=1; i<=argNum; i++){
(function(cur){
setTimeout(function(){
console.log(cur);
}, cur *10);
}(i));
}
};
func(3);
1
2
3
728x90
반응형
'프로그래밍 > Javascript' 카테고리의 다른 글
[jQuery] 제이쿼리 요소의 조작 (추가, 복사 및 삭제) (0) | 2020.10.28 |
---|---|
[JS] 자바스크립트 페이지 이동함수 - location.href / location.replace/ location.assign (0) | 2020.10.11 |
[JS] 자바스크립트 대화상자창 - Alert, Confirm, Prompt (0) | 2020.10.11 |
[Js] 자바스크립트의 유효범위 - Hoisting(호이스팅) (0) | 2020.10.08 |
[jQuery] Ajax 기본패턴 형태 (0) | 2020.10.07 |
[JS] 배열(Array) 삭제 함수 - pop(), shift(), splice() 함수 (0) | 2020.09.27 |
[JS] 배열(Array) 추가 함수 - push(), unshift(), slice() 함수 (0) | 2020.09.27 |
[JS] 키보드 Event - onKeyDown(), onKeyUp() 함수 (0) | 2020.09.26 |
Comments