<script>
for (var i = 0; i < 3; i++) {
function 함수(변수) {
setTimeout(function () {
alert(변수);
}, 0)
};
함수(i);
}
</script>
클로저를 이용했는데, 근데 이거 결과가 0, 1, 2가 아니라 0, 2, 1 이럴때도 있어;;;;;; 이거 왜이래;;;;
자바 스크립트 공부 이제 막 시작했는데, 클로저 너무 어려웡 왜쓰는질 모르겠엉 ㅜㅜㅜ
횽들도 잘 안되징??
애초에 왜 저런 식으로 짜는데? setTimeout은 타이머 등록 함수인데 순서대로 setTimeout() 을 했다고 해서 반드시 그 안의 함수가 순서대로 불린다는 보장이 안되나 보지.
그러게 의도가 안드러나는 자신만의 독특한 코딩 스타일이네
그니깐.. 내말이 애초에 왜 클로저란 개념이 왜 필요한지도 모르겠어... 자바스크립트의 특성이라는데. 저건 대체 왜저럴까...
그냥 책에 있는 클로저 소스코드야
Closure 얘기하는 건데 Clojure 얘기하는 줄 알고 야이미친 성님도 등장하셨구려 ㅋㅋㅋ
그냥 예제일 뿐, 저런 일을 하는데 저렇게 짜는 사람 절대 없다. setTimeout( xxx, 0 ); 은 비동기 테크닉을 편법으로 자바스크립트에서 구현하고 싶을 때 쓰는 거임.
클로저라는 개념이 자바스크립트에 존재하는 이유는, 자바스크립트가 함수 안에서 함수를 생성할 수 있기 때문임.
뭐, 클로저를 이해하자는 측면에서 급조해낸 조잡한 예제같은 거니깐 너무 신경쓰지마. 걍 클로저가 어떤 거라는 것만 알면 됨. 저기서 function 함수(변수) { ... function() { ... 변수 ... } ... } 했을 때 함수 안의 함수의 '변수'는 그 윗 '함수'라는 함수의 매개 변수인 '변수'를 참조한다는 개념만 알고 가면 돼.
ㅋㅋ 아니 그 클로져 아닌 줄은 알지. 클로져는 니가 환경(변수나 또 다른 함수)을 품은 함수를 런타임에 만들어 쓰는거지. 함수형 언어 스타일로 존나 파워풀하게 쓰는건데 자바스크립트에서는 존나 헷갈리는게 사실임. 난 그럴 때는 make<이름>Fn 뭐 이런식으로 클로져를 만들어주는 함수를 만들어 쓰곤 했지(만 지금이야 걍 clojurescript를 씀)
예전에 막 런타임에 함수를 만들어내는 함수를 만들어내는 함수를 찍어 내곤 했었지 ㅋㅋㅋ
와 친절하신분들이당. 발기할뻔 함.