바닐라코딩

4주차 강의 this

단점이없어지고싶은개발자 2021. 8. 11. 23:25
반응형

자바스크립트의 'this'는 선언이 아닌 어떻게 호출되었느냐가 중점이다!!
누가 나를 불렀는가?의 초점을 맞추면 this의 값이 어떻게 나오는지 알 수 있다.

 

-function 키워드를 이용해 생성한 일반 함수와는 다르게, 화살표 함수 내부에는 this와 arugments가 존재하지 않는다!!
사용할 경우, 일반 변수와 동일하게 스코프체인을 따라 탐색하게 된다. 즉 화살표함수에서 this를 사용하면 스코프체인을 따라 this를 찾으러 간다.

 

this를 선언하는 선언부의 초점이 아닌 어떻게 함수가 실행되고 있는지를 봐야 된다. 그리고 그 실행문에는 4가지 경우가 있다.

 

1. 일반함수선언

 - 일반 함수처럼 선언 할 경우 this는 Global Object처럼 실행한다. 그래서 만약 값이 없다면 뜨지 않는다. 
엄격한 모드를 사용하는 경우 this는 undefined가 나온다. 

엄격한 모드를 사용하지 않을 경우 Global Object처럼 인식한다.

2. . Dot Notation

var age = 29;

const abc = {
 age: 20,
 foo: function () {
 console.log(this.age);
 }
 
 const func = abc();
 
//일반 함수처럼 인식해서 this 값은 global Object로 29가 나온다
 func();
 
//Dot Notation으로 abc를 인식 20이 나온다.
 abc.foo();

 

3. call, apply, bind

  함수에도 메소드가 있다. 그리고 이 3가지는 함수의 메소드인데 비슷하면서도 약간의 차이점이 있기 때문에 헷갈릴 수 있다.

function abc() {
console.log(this);
}

//일반적인 실행
abc();

//call, apply 실행 결과는 같다 
abc.call();
abc.apply();

function foo(a) {
console.log(this.age);
console.log(a);

const moo = {
age: 29;
}

foo.call(ken, 1); //ken, 1출력
foo.apply(ken, [1]); //ken 1출력

call과 apply의 공통점은 바로 뒤에 오는 인자는 this값으로 받는다. 

 

차이점은
call은 그 뒤에 인자를 받는대로 그대로 매개변수가 가능하고,

apply는 인자를 2개만 받고, 2번째 인자는 배열로 받아야 한다. 

만약 매개변수가 확실하다면 call로, 그게 아니라 배열 메소드를 이용해 바꿔줘야 된다면 apply를 사용하면 좋을 것 같다.

 

bind는 call과 비슷하다. 첫 번째 인자는 this값 그리고 매개변수가 얼마든지 가능하다 그러나 쓰임새가 다르다.

function foo() {
console.log(this);
}

const abc = foo.bind();

abc();

바로 메소드를 이용해 작동시키지 않고, 새로운 함수를 반환한다. 즉 abc라는 함수의 값을 전해주고, 그 abc를 실행시켜야지 작동한다. 

bind메소드는 새로운 함수를 반환하고 실행했을 때 원본 함수가 실행한다!! 잊지말자. bind를 쓰는 것 만으로 끝나지 않는다.

 

4. new 키워드

new를 사용했을 경우 빈 객체가 된다.

function Foo(name) {
this.name = name;
console.log(this);
}

new Foo("yohan")
//new를 쓸 때 통상적으로 맨 앞은 대문자로 쓴다

그러면 foo {name:yohan}이 된다. 

 

this는 객체지향을 비롯해 많은 부분에서 사용하기 때문에 자세히 짚고, 문제도 많이 풀어보면 좋다. 


https://dmitripavlutin.com/javascript-this-interview-questions/

 

7 Interview Questions on "this" keyword in JavaScript. Can You Answer Them?

7 interview questions to challenge your knowledge on "this" keyword in JavaScript.

dmitripavlutin.com

https://dev.to/liaowow/take-this-quiz-understand-how-this-works-in-javascript-44dj

 

Take 'this' Quiz, Understand How 'this' Works in JavaScript

Among all the abstract ideas JavaScript has to offer, the 'this' keyword can be one of the most chall...

dev.to

정리판

반응형