call()과 apply()은 함수 호출시
this
를 명시적으로 지정하고 싶을 때 사용합니다. 그리고 이 때 첫번째 인자로 전달되는 객체가this
객체가 됩니다.
특히, 메소드가 존재하지 않는 유사배열의 경우, Array.prototype으로 부터 메소드를 빌려 실행할 수 있습니다.
func.call()
와 func.apply()
은 두 번째 인자부터 파라미터 값들이 전달됩니다. 차이점은 func.call()
은 인자들이 각각 전달되고, func.apply()
은 배열의 형태로 전달된다는 점입니다.
func.call(this, ...args)
func.apply(this, args)
bind()는 call()이나 apply()와 마찬가지로 this 객체 및 인자를 바인딩하나, 당장 실행하는 것이 아니라 단지 바인딩된 함수를 리턴하는 메소드입니다.
func.bind()
의 파라미터 값은 call()과 동일한 방식으로 전달됩니다.
func.bind(this, ...args)
bind()의 대표적인 유용 사례는 Event Handler와 setTimeout메소드의 콜백함수로 사용될 경우입니다.
자료 출처: 코드스테이츠(CodeStates)