2018. 3. 19. 12:53 JavaScript/개인 스터디
[JavaScript] 함수형 프로그래밍 for-each
함수형 프로그래밍을 부합하게 해주는 for-each 함수
Array.prototype.forEach()
arr.forEach(callback[, thisArg])
callback
각 요소에 대해 실행할 함수
currentValue
> 배열에서 현재 처리 중인 요소
index
> 배열에서 현재 처리중인 요소의 인덱스
array
> forEach() 가 적용되고있는 배열
thisArg
선택사항, callback 을 실행할때 this로서 사용하는 값
반환값
undefined
** Exception 처리를 하지 않는 한 forEach 를 정지 또는 탈출이 불가능합니다.
(stop,break,continue, 등등) -> 이 행동이 필요한 경우는 forEach 의 잘못된 사용
기본 for문을 사용하길 권장
[참조] developer.mozilla.org
forEach () 의 함수 사용의 예
1 2 3 4 | function logArray(element,index,array){ console.log( 'a[' + index + '] = ' + element); } [2,5, , 9].forEach(logArray); |
결과
a[0] = 2
a[1] = 5
a[3] = 9
this arg를 사용시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function Counter(){ this .sum = 0; this .count = 0; } Counter.prototype.add = function (array){ array.forEach( function (entry){ this .sum += entry; ++ this .count; }, this ); /// ^ this 확인 }; // Counter.prototype.add = function ... var obj = new Counter(); obj.add([2,5,9]); /* forEach 함수의 function(entry) 옆 thisarg부분을 Counter의 this를 넘김으로써 Counter Object의 add 함수를 추가하면서 object자체의 sum과 count값을 접근하여서 수정할수 있게 된다. 이와같은 this를 넘겨서 사용도 가능 */ |
결과
obj.count
3
obj.sum
16
Simple for-each 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // sample function forEach function forEach_(list,callback) { for ( var n=0; n< list.length;n++) { callback.call(list[n],n); } } /* list : array 형태의 배열을 파라미터로 받음 callback : 첫번째 파라미터로 들어온 list를 순회하여서 해당 함수(callback)으로 던져준다. call 은 (1) function, (2) ...... 의 형태를 띄며 1. array_ 가 첫번째 파라미터로 들어간다. list 과 매핑 2. for문을 통해서 list 의 길이만큼 순회를 한다. 3. list[n] 값과 index 값을 callback 에 넘긴다. 동시에 call을 사용하여서 넘김 //** call이 없을 경우에 list[n] ,index가 넘어가면 callback function 에서 index에 array[n] 인 값이 들어갈것이다.index가 아니라 call을 같이 사용하였기 때문에 들어온 array 에 대한 this 를 가지고 두번째 n 을 파라미터로넘기기 때문에 n = index로 넘어가고 this는 넘기는 list[n] 자체가 들어간다. 해당 코드를 종료 보면 */ // smaple Array var array_ = [ 'First' , 'Second' , 'Third' , 'Forth' , 'Fifth' ]; forEach_(array_, function (index){ console.log( this ); this == array_[index] ? console.log(array_[index]) : console.error( "not Exist" ); }); |
결과
this는 list[n]
index는 n 이 들어감이 확인된다. 'First', 'Second'가 나온이유는 array_[index]로 출력하였기 때문
callback 함수 만드는법을 따라 보았다. 아 물론 스터디이기 때문에 책을 보고
'JavaScript > 개인 스터디' 카테고리의 다른 글
[JavaScript] 함수 - 메모이제이션 (0) | 2018.03.27 |
---|---|
[JavaScript] 기본 내용 정리 (0) | 2018.03.19 |
[JavaScript] apply call bind 함수 메서드 (0) | 2018.03.15 |
[JavaScript] 함수의 param(파라미터) 과 args(인자) (0) | 2018.03.08 |
[JavaScript] 함수 유효범위 - 호이스팅(hoisting) (0) | 2018.03.06 |