>  기사  >  웹 프론트엔드  >  ES6 Arrow Functions에 대한 이 질문에 답하세요.

ES6 Arrow Functions에 대한 이 질문에 답하세요.

小云云
小云云원래의
2018-03-01 09:16:121407검색

화살표 함수의 This는 일반 함수와 다르게 정의된 함수를 가리킵니다. 화살표 함수의 this는 함수가 실행될 때가 아니라 함수가 정의될 ​​때 묶입니다.

(1) 일반적으로 this가 가리키는 함수는 실행 중에 바인딩됩니다. obj.say()가 실행되면 obj 개체를 가리킵니다.


var x=11;
var obj={
 x:22,
 say:function(){
 console.log(this.x)
 }
}
obj.say();
//console.log输出的是22

(2) 소위 정의 시 바인딩은 이것이 상위 실행 컨텍스트에서 상속된다는 의미입니다! ! 여기의 This.x는 실제로 window.x를 나타내므로 출력은 11입니다.


var x=11;
var obj={
 x:22,
 say:()=>{
 console.log(this.x);
 }
}
obj.say();
//输出的值为11

비슷한 것들은 다음과 같습니다:

(3)


var a=11
function test1(){
 this.a=22;
 let b=function(){
 console.log(this.a);
 };
 b();
}
var x=new test1();

Output 11

화살표 기능 상황:


var a=11;
function test2(){
 this.a=22;
 let b=()=>{console.log(this.a)}
 b();
}
var x=new test2();
//输出22

제가 이해한 방식은 다음과 같습니다. ES6 this의 구체적인 의미를 바인딩할 때 상속해야 하는 것은 부모 실행 컨텍스트에서 this이며 부모 실행 컨텍스트가 아니어야 합니다! ! ! 이러한 방식으로 화살표 함수의 불분명한 방향이 많이 해결됩니다.

참고: 단순 개체(비함수)에는 실행 컨텍스트가 없습니다!

화살표 함수에서 이에 대한 심층적인 이해

화살표 함수에서 이 점을 고정하는 것은 이것을 화살표 함수 내부에 묶는 메커니즘이 있기 때문이 아닙니다. 실제 이유는 화살표 함수 때문입니다. 결과적으로 내부 this는 외부 코드 블록의 this입니다. 바로 이것이 없기 때문에 생성자로 사용할 수 없습니다.

ES5에서 화살표 함수 변환을 시뮬레이션할 수 있습니다.


// ES6
function foo() {
 setTimeout(() => {
 console.log('id:', this.id);
 }, 100);
}
// ES5
function foo() {
 var _this = this;

 setTimeout(function () {
 console.log('id:', _this.id);
 }, 100);
}

객체를 정의할 때 객체 속성을 정의하세요. 내부는 일반적으로 전역 세계를 가리키거나 객체가 위치한 환경을 가리킵니다.

관련 추천:

ReactJs의 화살표 함수 사용 분석

JavaScript 화살표 함수 사용법 소개

JavaScript의 일반 함수와 화살표 함수의 차이점과 사용법을 설명하는 코드 예제


위 내용은 ES6 Arrow Functions에 대한 이 질문에 답하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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