JavaScript에서 "this"키워드를 완전히 이해하기 위한 6가지 간단한 규칙
저는 데니스입니다.
JavaScript 인터뷰에서 가장 인기 있는 주제 중 하나는
this
키워드입니다. 이 개념은 기본이지만 this
키워드의 규칙을 잘 모르는 개발자가 많습니다.사실 복잡한 것은 없습니다. 다른 인터뷰 대상자들 사이에서 눈에 띄는 데 도움이 되는 6가지 간단한 규칙을 공유하고 싶습니다.
규칙
1. 새로운 키워드
첫 번째이자 가장 중요한 규칙은 함수를 호출할 때 new
키워드가 사용되면 이 함수 내부this
는 생성자 함수에 의해 생성되고 반환되는 새 객체를 참조한다는 것입니다. 이 규칙은 ES6 클래스를 사용할 때도 적용됩니다.
예시
function Person() {
console.log(this)
this.age = 23
console.log(this)
}
const p = new Person()
/* Output */
// {}
// { age: 23 }
2. 신청/호출/바인드
우리 모두가 알고 있는 규칙은 this
/apply
/call
세 가지 방법 중 하나를 사용하여 특정 객체를 bind
로 사용하도록 함수 호출을 강제할 수 있다는 것입니다.
function myFunction() {
console.log(this)
}
const thisObject = {
someValue: 23
}
myFunction.call(thisObject) // { someValue: 23 }
myFunction.apply(thisObject) // { someValue: 23 }
const myBoundFunction = myFunction.bind(thisObject )
myBoundFunction() // { someValue: 23 }
3. 메소드로서의 기능
면접용으로 꽤 유명합니다. 규칙은 간단합니다. 함수가 메서드로 호출될 때(즉, 함수가 선행 점에 의해 호출됨) this
는 함수가 속성인 객체입니다( this
는 해당 점 앞의 객체입니다).
const thisObject = {
someValue: 23,
itsMethod: function() {
console.log(this)
}
}
thisObject.itsMethod('John') // { someValue: 23, itsMethod: ƒ }
4. 가장 간단한 경우
이것은 가장 간단한 방법이지만 많은 사람들이 잊어버리거나 모릅니다. 규칙에 따르면 위의 조건 없이 함수가 호출되면 this
는 브라우저에 대한 global
객체( window
)입니다.
function f() {
console.log(this)
}
f() // Window (global object)
5. 주문
여러 규칙을 동시에 적용할 수 있는 경우 목록에서 더 높은 규칙에 따라 this
값이 결정됩니다.
6. 화살표 기능
화살표 함수는 인터뷰에 가장 많이 사용됩니다. this
및 화살표 기능에 특별한 것이 있다는 것은 누구나 알고 있지만 소수는 실제로 규칙을 알 수 있습니다.
따라서 규칙은 화살표 함수가 모든 규칙을 무시하고 생성될 때 주변 범위의 this
값을 취한다는 것입니다.
간단합니다! 화살표 함수의 this
값은 생성된 라인을 찾고 거기에 this
값이 무엇인지 확인하여 결정할 수 있습니다.
자신을 테스트!
규칙을 이해했는지 테스트합시다 🙂.
const obj = {
value: 'abc',
createFn: function() {
return function() {
console.log(this)
}
},
}
const fn = obj.createFn()
fn()
이 경우 this
로 인쇄되는 내용을 알려주실 수 있습니까? 그 이유를 명확하게 말할 수 있습니까?
테스트하려면 크롬 콘솔에서 이 코드를 실행하면 됩니다.
하지만 이 코드를 "수정"하는 방법에 대해 대답할 수 있습니까?
대답이 "예"이면 축하합니다! 🎉 자바스크립트 면접 합격에 한 발 더 다가섰습니다!
결론
this
의 규칙은 정말 간단하지만, 그것을 알면 면접관에게 기본에 대한 이해를 확실히 보여줄 수 있습니다.
제 글을 읽어주셔서 감사합니다. DEV 및 Twitter에서 저를 구독하십시오.
평화!
Reference
이 문제에 관하여(JavaScript에서 "this"키워드를 완전히 이해하기 위한 6가지 간단한 규칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/denisveleaev/6-simple-rules-to-fully-understand-this-keyword-in-javascript-1kmk
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function Person() {
console.log(this)
this.age = 23
console.log(this)
}
const p = new Person()
/* Output */
// {}
// { age: 23 }
function myFunction() {
console.log(this)
}
const thisObject = {
someValue: 23
}
myFunction.call(thisObject) // { someValue: 23 }
myFunction.apply(thisObject) // { someValue: 23 }
const myBoundFunction = myFunction.bind(thisObject )
myBoundFunction() // { someValue: 23 }
const thisObject = {
someValue: 23,
itsMethod: function() {
console.log(this)
}
}
thisObject.itsMethod('John') // { someValue: 23, itsMethod: ƒ }
function f() {
console.log(this)
}
f() // Window (global object)
const obj = {
value: 'abc',
createFn: function() {
return function() {
console.log(this)
}
},
}
const fn = obj.createFn()
fn()
Reference
이 문제에 관하여(JavaScript에서 "this"키워드를 완전히 이해하기 위한 6가지 간단한 규칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/denisveleaev/6-simple-rules-to-fully-understand-this-keyword-in-javascript-1kmk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)