Upload
etribestg
View
277
Download
8
Embed Size (px)
DESCRIPTION
2014-07-25 Clojure programming-김민지
Citation preview
Clojure ProgrammingETRIBE
STG 김민지
1 Clojure 란 ?
Clojure 의 장점
주의할 점
목차
2
3
1 Clojure 란 ?
Clojure 란 ?1
> 함수가 정의되는 순간의 환경을 기억하는 함수 , 즉 함수 외부에 선언된 변수를 참조하는 함수 Clojure 는 변수 자신들이 바인드 되는 환경에 한정되지 않는 변수를 가지는 표현식 > 자신이 생성된 함수의 context 에 직접 접근 할 수 있는 함수
Closure 는 ,함수라고도 하고 ,상황이라고도 하고 ,유효범위 (scope or code block)라고도 함
con-text
con-text
2 Clojure 의 장점
Clojure 의 장점1
Clojure 를 좀더 잘 알아야 할 이유 !
문제를 일으킬 수 있는 부분이 있으므로 주의활용 방법에 따라 언어 단점 보완
주의 할 점- Closure 를 잘못 사용해서 생기는 오류 조심
장점 활용- Javascript 언어 = ‘ 전역변수’ Closure 해결
- 막강한 표현력 코드 작성 / 독해 인지적 비용 ↓ 추상성 구축 용이 손쉬운 변경 버그 ↓
con-text
로제타 코드
3 주의할 점
주의할 점3
Closure 여러 번 호출하기
[ 상황 ]Closure function 를 여러 번 호출해야 하는 경우
Function Test1() {Var innervar = 1;return function closureFun() {
return innervar++;};
}
var innerfun = Test1();Var temp1 = innerfun ();Var temp2 = innerfun ();Var temp3 = innerfun ();Console.log(temp1+” : ” + temp2 + “ : ” + temp3);
temp1, temp2, temp3 의 값은 ?
주의할 점3
Closure 여러 번 호출하기
[ 상황 ]Closure function 를 여러 번 호출해야 하는 경우
Function Test1() {Var innervar = 1;return function closureFun() {
return innervar++;};
}
var innerfun = Test1();Var temp1 = innerfun ();Var temp2 = innerfun ();Var temp3 = innerfun ();Console.log(temp1+” : ” + temp2 + “ : ” + temp3);
각각 1,2,3 이 출력Innervalue 변수를 참조하여 계속 증가
주의할 점3
잘못된 사용의 예
[ 상황 ]화면의 두 개의 button UI 를 클릭하면 각각 다른 값을 출력: 1 번 버튼을 누르면 1 출력 , 2 번 버튼 누르면 2 출력
Window.onload = function() {for (var I = 1; I < 3; i++) {
document.getElementById(“btn” + i); addEventListener (“click”, function () {alert(i);},
false);
}}
Button 두 개를 클릭 할 때 ,각 각 어떤 값이 노출될까 ?
주의할 점3
잘못된 사용의 예
[ 상황 ]화면의 두 개의 button UI 를 클릭하면 각각 다른 값을 출력: 1 번 버튼을 누르면 1 출력 , 2 번 버튼 누르면 2 출력
i = 1 일 때btn1 -> function () {alert (1) }
i = 2 일 때btn2 -> function () {alert (2) }btn1 -> function () {alert (2) }
i = 3 일 때btn3 -> function () {alert (3) }btn2 -> function () {alert (3) }btn1 -> function () {alert (3) }
I 는 참조 된 것으로 그 값이 변경되는 경우 계속 업데이트 반영
주의할 점3
잘못된 사용의 해결
참조하고 있는 변수 (i) 의 관계를 끊기: immediate function 을 활용하면서 중간과정에서 별도 파라미터 (otherVal) 를 통해 클로저 상황이 아닌 다른 메모리 영역을 바라보게 함
Window.onload = function () {for(var I = 1; I < 3; i++) {{ function(otherVal) {document.getElementById(“btn”
+otherVal).addEventListener(“click”, function() { alert (otherVal);
}, false);}
} I 의 값은 인자로 할당되지만 otherVal라는변수로 대체되어 event handler 로 등록
이것은 변수 i 의 참조와의 연결을 끊는 것
Q A&
Thank You