apply()와 call() 메서드를 사용하여 호출하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function juggle(){ var result = 0; for(var n=0; n<arguments.length; n++){ result += arguments[n]; } this.result = result; // 결과값을 함수 컨텍스트에 저장 } var ninja1 = {}; var ninja2 = {}; juggle.apply(ninja1, [1,2,3,4]); juggle.call(ninja2, 5, 6, 7, 8); ninja1.result === 10; // true ninja2.result === 26; // true | cs |
juggle함수에서는 this(함수 컨텍스트)에 result 값을 저장하게 되어있다.
apply, call 메서드를 사용하여 각각의 함수 컨텍스트를 ninja1, ninja2로 명지적으로 지정해 주었다.
=> 함수 호출시 임의의 객체를 함수 컨텍스트로 지정할 수 있다.
콜백의 함수 컨텍스트를 강제로 지정하기
함수 컨텍스트로 강제 지정하는 구체적인 예제를 살펴보자
일반적인 명령형 프로그래밍에서는 메서드에 배열을 전달하고 루프를 돌며 배열 요소를 순회하며 연산을 처리한다.
1 2 3 4 5 6 7 8 9 10 11 | function forEach(list, callback){ for(var n=0; n<list.length; n++){ callback.call(list[n], n); } } var weapons = ['gun', 'sword', 'missile']; forEach(weapons, function(index){ this == weapons[index] }); | cs |
forEach에서 callback 함수로 실행되는 함수안의 this(함수컨텍스트)는 weapons의 element가 된다.
(forEach 함수에서 callback을 call로 호출을 안했을 경우, this(함수컨텍스트)는 전역(window)가 됨)
당장에는 필요가 없어 보일지 모르지만, event처리시 많이 필요하게 되므로 알아두도록 하자
'프로그래밍 노트 > JAVASCRIPT' 카테고리의 다른 글
[Javascript] 스타일(CSS) 다루기 (0) | 2018.12.17 |
---|---|
[Javascript] 속성(attribute)와 프로퍼티(property)의 차이 (0) | 2018.12.03 |
[Javascript] 함수의 호출_3 (생성자로 호출, 생성자의 기능) (0) | 2018.11.27 |
[Javascript] 함수의 호출_2 (메서드로 호출) (0) | 2018.11.27 |
[Javascript] 함수의 호출_1 (함수로 호출) (0) | 2018.11.27 |
apply()와 call() 메서드를 사용하여 호출하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function juggle(){ var result = 0; for(var n=0; n<arguments.length; n++){ result += arguments[n]; } this.result = result; // 결과값을 함수 컨텍스트에 저장 } var ninja1 = {}; var ninja2 = {}; juggle.apply(ninja1, [1,2,3,4]); juggle.call(ninja2, 5, 6, 7, 8); ninja1.result === 10; // true ninja2.result === 26; // true | cs |
juggle함수에서는 this(함수 컨텍스트)에 result 값을 저장하게 되어있다.
apply, call 메서드를 사용하여 각각의 함수 컨텍스트를 ninja1, ninja2로 명지적으로 지정해 주었다.
=> 함수 호출시 임의의 객체를 함수 컨텍스트로 지정할 수 있다.
콜백의 함수 컨텍스트를 강제로 지정하기
함수 컨텍스트로 강제 지정하는 구체적인 예제를 살펴보자
일반적인 명령형 프로그래밍에서는 메서드에 배열을 전달하고 루프를 돌며 배열 요소를 순회하며 연산을 처리한다.
1 2 3 4 5 6 7 8 9 10 11 | function forEach(list, callback){ for(var n=0; n<list.length; n++){ callback.call(list[n], n); } } var weapons = ['gun', 'sword', 'missile']; forEach(weapons, function(index){ this == weapons[index] }); | cs |
forEach에서 callback 함수로 실행되는 함수안의 this(함수컨텍스트)는 weapons의 element가 된다.
(forEach 함수에서 callback을 call로 호출을 안했을 경우, this(함수컨텍스트)는 전역(window)가 됨)
당장에는 필요가 없어 보일지 모르지만, event처리시 많이 필요하게 되므로 알아두도록 하자
'프로그래밍 노트 > JAVASCRIPT' 카테고리의 다른 글
[Javascript] 스타일(CSS) 다루기 (0) | 2018.12.17 |
---|---|
[Javascript] 속성(attribute)와 프로퍼티(property)의 차이 (0) | 2018.12.03 |
[Javascript] 함수의 호출_3 (생성자로 호출, 생성자의 기능) (0) | 2018.11.27 |
[Javascript] 함수의 호출_2 (메서드로 호출) (0) | 2018.11.27 |
[Javascript] 함수의 호출_1 (함수로 호출) (0) | 2018.11.27 |