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 한다는것은 강한 순환 참조가 발생할 수 있다는 것인데.. 다음번에 공부해봐야겠다.