중첩 된 개체 리터럴에서 화살표 키를 사용하면 'this'키워드가 항상 global
을 가리키는 것으로 나타났습니다.중첩 된 객체 리터럴 내에서 화살표 함수의 'this'가 변경되지 않는 이유는 무엇입니까?
다른 질문에 따르면, 다음 스 니펫은 화살표 함수의 'this'가 어휘 적 맥락에서 정의 된 것으로 설명 할 수 있습니다.
var c = 100;
var a = {
c: 5,
b: {
c: 10,
fn:()=> {return this.c;}
}
}
console.log(a.b.fn());// still 100, why not 5?
나는, 어휘 문맥 측면에서 고려한다면,해야하지 '이'의미 abfn 포인트 :
var c = 100;
var a = {c:5 , fn:() => {return this.c;} };
console.log(a.c); //100
그러나, 나는 다음과 같은 코드 (문자 중첩 된 객체)를 이해할 수 없다 ~에?
왜 개체가 몇 개 중첩되어 있어도 'this'인스턴스가 모두 창 또는 전역을 가리 킵니까?
현재 범위를 가리 킵니다. 객체는 범위를 변경하지 않고 범위 만 변경합니다. 따라서 화살표 함수 내부의 'this'는 내부에있는 가장 가까운 함수를 나타냅니다. 귀하의 경우, 그것은 단지 최상위 수준입니다. – mash
@mash :'this'와 범위는 크게 관련이 없으며 'this'는 드물게 ... [a] 함수를 나타냅니다. " 그러나 논평의 요지는 물론 정확합니다. –
레코드 용 : 화살표 기능은 범위와 마찬가지로 기능을 변경합니다. 그들은 단지'this','arguments','super'와'new.target'을 어휘 적으로 묶습니다. –