>웹 프론트엔드 >JS 튜토리얼 >`bind()`가 화살표 함수 `this`와 작동하지 않는 이유는 무엇입니까?

`bind()`가 화살표 함수 `this`와 작동하지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-13 17:07:09772검색

Why Doesn't `bind()` Work with Arrow Functions' `this`?

애로우 함수에서 'this' 바인딩에 대한 수수께끼: 수수께끼 공개

화살표 함수의 매혹적인 단순함에도 불구하고 'this'에 대한 불가해한 동작 이'는 많은 개발자들을 당황하게 만들었습니다. 화살표 함수 내에서 'this'를 특정 컨텍스트에 바인딩할 수 없다는 점은 반복되는 불만의 원인이 되었습니다.

딜레마를 설명하려면 다음 코드를 고려하세요.

const f = () => console.log(this);

const o = { a: 42 };

const fBound = f.bind(o);

fBound(); // Expected: { a: 42 }, Actual: { window: Window }

이 예에서 , 'bind()' 메소드를 사용하여 화살표 함수 'f'의 'this' 컨텍스트를 객체 'o'에 바인딩하려고 시도합니다. 그러나 'fBound()'를 호출하면 예상되는 'o' 객체 대신 전역 'window' 객체가 기록되는 이유는 알 수 없습니다.

이 당황스러운 동작은 화살표 함수의 고유한 특성에 뿌리를 두고 있습니다. 자체 'this' 컨텍스트가 있는 일반 함수와 달리 화살표 함수는 주변 어휘 범위에서 'this' 바인딩을 상속합니다. 이 경우 'f'는 전역 범위 내에서 정의되어 전역 'window' 객체에 바인딩된 'this'를 렌더링합니다.

ECMAScript 2015 사양에는 다음과 같이 확실하게 명시되어 있습니다.

"다음에 대한 참조는 다음과 같습니다. ArrowFunction 내의 인수, super, this 또는 new.target은 어휘적으로 둘러싸는 환경의 바인딩으로 해석되어야 합니다."

따라서, 화살표 함수 내에서 'this'를 다시 바인딩하는 것은 불가능해집니다. 'this'는 화살표 함수가 정의된 컨텍스트에 영원히 고정되어 있습니다.

'this'의 의미 있는 사용이 코드에 중요하다면 신중한 조치는 화살표 함수 대신 일반 함수를 활용하는 것입니다. 화살표 기능. 일반 함수는 'this' 바인딩을 더 강력하게 제어할 수 있으므로 'bind()' 또는 다른 방법을 사용하여 'this'를 원하는 컨텍스트에 명시적으로 바인딩할 수 있습니다.

위 내용은 `bind()`가 화살표 함수 `this`와 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.