closure reference ?

hankyulee·2021년 9월 22일
0

closure

목록 보기
2/7
post-thumbnail

클로저 공부하다 보니, 캡쳐라는 말이 자주 나온다.

  • 캡쳐란 원본값이 사라져도 클로저의 body에서 값을 활용할 수 있도록 가져오는것. 스코프에 있는 VALUE또는 REFERENCE타입의 변수를 캡쳐할때 REFERENCE 캡쳐한다. 스코프는 클로저의 내부함수에 영향을 미치는 주변환경도 포함한다.

    var a= 5
    let closure ={print(a)}
    a = 10
    closure() // 10

스코프안에 a 가 있고 value 이지만 참조하고 있기때문에 a를 10으로 바꾸면 10을 출력한다. 그리고 당연하겠지만 아래와 같이, 클로저에서 전역변수를 바꾸면 전역변수도 바뀐다.

이 코드는 클로저의 캡쳐관련하여 설명할때 가장 많이 나오는 코드이다. print()해서 runningTotal의 값을 지켜보려고 plusTen()을 세번 실행했는데, 로그처럼 한번만 출력된것을 알 수있다. makeIncrementer함수의 출력이 클로져인것을 잊고있었다.. 클로져를 참조하는 변수를 선언할때만 print()가 실행된다.
중요한것은, plusTen()을 명령할때마다 10,20,30 즉 runningTotal과 amount변수를 기억했다는 사실을 알 수 있다. 이것이 캡쳐이다.
reference 한다는것은 강한 순환 참조가 발생할 수 있다는 것인데.. 다음번에 공부해봐야겠다.

0개의 댓글