apply 와 call 은 함수 실행시 함수 컨텍스트를 전달된 인자로 변경 시킬 수 있게 해준다.

함수 컨텍스트란 함수가 실행 될때 this 인자로 참조 하는 객체를 의미 한다.

단지 차이점은 call은 파라미터를 직접 넘기게 되고 apply이는 파라미터를 배열 형태로 넘길수 있다.

참고

IE 계열에서 전달되는 인자 값이 undefined 이면 에러가 난다.

fFunc.call(thisObject, a, b, c, d, ...);
fFunc.apply(thisObject, aArgs);

[출처] apply 와 call 에 대해서 알아 보자 (Web Programmer 2.0) |작성자 치토스

사용

<html>
<head>
<script>
  var o1 = {handle :'o1'};
  var o2 = {handle :'o2'};
  var o3 = {handle :'o3'};
  window.handle = 'window';
 
  function whoAmI(){
    return this.handle;
  }
  o1.identifyMe = whoAmI;

  alert(whoAmI());
  alert(o1.identifyMe());
  alert(whoAmI.call(o2));
  alert(whoAmI.apply(o3));

</script>
</head>
<body>
</body>
</html>

결과
window
o1
o2
o3

형태로 나온다. call과 apply 파라미터 인자 (객체)에 특정함수로 실행하는 것이다. 함수.call(객체)임 셈이다. 


+ Recent posts