2017-04-23 1 views
0

간단한 ES5 코드를 ES6으로 변환하려고하면 당황 스럽습니다.화살표 함수는 call, apply, bind를 사용합니다 - 작동하지 않습니까?

var obj = {num: 2} 

var addToThis = function (a, b, c) { 
    return this.num + a + b + c 
} 

// call 
console.log(addToThis.call(obj, 1, 2, 3)) 

// apply 
const arr = [1, 2, 3] 
console.log(addToThis.apply(obj, arr)) 

// bind 
const bound = addToThis.bind(obj) 
console.log(bound(1, 2, 3)) 

모든 위의 원활하고 예상대로 실행 :

의 내가 코드 블록 있다고 가정 해 봅시다.

하지만 최대한 빨리 다음과 같이 const를 화살표 기능 등 ES6 기능을 사용하기 시작하면 :

const obj = {num: 2} 

const addToThis = (a, b, c) => { 
    return this.num + a + b + c 
} 

그것은 더 이상 작동 및 오류가 발생하지 않습니다이 : 정의되지 않은 재산 'NUM'을 읽을 수 없습니다.

누군가 this이 더 이상 작동하지 않는 이유를 설명해주세요.

답변

0

람다 함수 (화살표 함수)는 새로운 함수 컨텍스트를 만들고 호출 함수의 컨텍스트를 사용하지 않습니다.

"this"는 상위 컨텍스트를 나타냅니다. 'num'변수가 정의되지 않은 변수가없는 경우.

일반적으로 작성하는 모든 기능에서 새 항목을 만드는 대신 하나의 컨텍스트를 사용하기 때문에 대부분 편리합니다. 내 의견으로는/apply/bind는 완전히 혼란스럽고 람다 함수는 불필요하게 만든다.

관련 문제