ES6 화살표 함수의this 깊이 이해
4439 단어 ES6
1. 정의할 때 귀속
다음 예를 살펴보겠습니다.
(1)
var x=11;
var obj={
x:22,
say:function(){
console.log(this.x)
}
}
obj.say();
//console.log 22
일반적인 정의 함수는 우리의 이해와 같다. 실행할 때this의 지향을 결정하고obj를 실행할 때 알 수 있다.say () 때,this는 obj라는 대상을 가리킨다.
(2)
var x=11;
var obj={
x:22,
say:()=>{
console.log(this.x);
}
}
obj.say();
// 11
이렇게 하면 이상하다. 만약에 이전의 function 정의에 따라 출력해야 할 것이 22이고 이때 11을 출력했다면 ES6의 화살표 함수 중의this는 정의할 때의 귀속이라는 것을 어떻게 설명합니까?
이른바 정의시 귀속,this는 아버지가 실행하는 상하문을 계승하는 것!!의this, 예를 들어 여기 화살표 함수의this.x, 화살표 함수 자체와say는 키:value의 형식, 즉 화살표 함수 자체가 있는 대상은obj이고obj의 부모 실행 상하문은 윈도우이기 때문에this.x는 실제로 윈도우를 나타낸다.x, 따라서 출력은 11입니다.(this는 함수에서 호출되거나 구조 함수 new Object () 형식을 통해서만 this가 가능)
이와 유사한 것은 다음과 같다.
(3)
var a=11
function test1(){
this.a=22;
let b=function(){
console.log(this.a);
};
b();
}
var x=new test1();
11
화살표 함수 상황:
var a=11;
function test2(){
this.a=22;
let b=()=>{console.log(this.a)}
b();
}
var x=new test2();
// 22
이상하지 않아요? 저는 이렇게 이해합니다. ES6에서 정의할 때this의 구체적인 의미를 귀속시키고 계승해야 할 것은 아버지 집행 상하문 안의this입니다. 아버지 집행 상하문은 절대 피하세요!!!이렇게 하면 많은 화살표 함수 중의 지향이 명확하지 않으면 쉽게 풀린다.
주의: 간단한 대상(비함수)은 상하문을 실행하지 않습니다!
2017년 8월 13일 보충:
화살표 함수에서this가 가리키는 고정화는 화살표 함수 내부에this가 귀속되어 있기 때문이 아니다
메커니즘, 실제 원인은 화살표 함수에 자신의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);
}
그래서 대상을 정의할 때 대상의 속성을 정의하는데 그 안에 있는this가 가리키는 것은 일반적으로 전체 국면이나 이 대상이 있는 그 환경에서의this이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
(Javascript) ES6의 주요 특징 정리let을 사용하면 선언한 변수는 블록안에서만 유효하게 된다. const 역시 마찬가지로 블록스코프를 따른다 .const 와 let의 차이점은 const 는 상수로 값을 할당한다는 점이다. 따라서 값을 변경시키려고 하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.