Page 24 -
P. 24

전통적인 해결 방법은 클로저(다른 함수가 사용할 수 있도록 함수 내부에서 변
                  수를 생성하는 것), 고차 함수(다른 함수를 반환하는 함수), 즉시 실행 함수가
                  조합되어 있습니다. 잘 이해되지 않아도 괜찮습니다. 고차 함수에 대해서는 TIP

                  34 부분 적용 함수로 단일 책임 매개변수를 관리하라에서 더 자세히 다룹니다.
                  다행히 아직은 이런 고급 개념을 이해하지 않아도 됩니다. 위 예제 코드를 let

                  을 이용해 다시 작성하면, 코드를 어수선하게 만들지 않고도 같은 결과를 얻을
                  수 있습니다. 다음 코드를 브라우저 콘솔이나 REPL에서 확인해보면 예상한 결
                  과가 나올 것입니다.


                   variables/scope/scope.js
                   01   function addClick(items) {
                   02     for (let i = 0; i < items.length; i++) {
                   03       items[i].onClick = function () {
                   04         return i;
                   05       };
                   06     }
                   07     return items;
                   08   }
                   09   const example = [{}, {}];
                   10   const clickSet = addClick(example);
                   11   clickSet[0].onClick();


                  2행을 보면, 코드에서 바뀐 것은 var 대신 let을 사용한 것뿐입니다. let은 블
                  록 유효 범위를 따르므로, 블록 내에서 선언한 변수는 해당 블록에서만 유효합

                  니다. 따라서 반복되어 값이 변경되더라도, 이전에 선언한 함수의 값은 변경되
                  지 않습니다.

                  쉽게 말해 let을 이용하면 for 문이 반복될 때마다 값을 잠급니다.

                  var로 할 수 있는 거의 모든 것을 let으로 대체할 수 있으므로, var를 사용하려
                  한 곳에 항상 let을 사용하는 것이 좋습니다.









                                                             1장  변수 할당으로 의도를 표현하라  037




     코딩의기술_자바_07.indd   37                                                2019-12-13   오전 10:27:03
   19   20   21   22   23   24   25   26   27   28   29