[TIL] this

최하온·2024년 1월 7일
0

TIL

목록 보기
16/71
post-thumbnail

What I learned new


호이스팅

함수정의 방식

1. 함수 선언문: 함수명 a가 곧 변수명

function 정의부만 존재, 할당 명령이 없는 경우

function a() {
...
}
a(); // 실행 ok

2. 함수 표현식. 정의한 function을 별도 변수에 할당하는 경우

  • 익명함수표현식 : 변수명 b가 곧 변수명
var b = function () {};
b(); // 실행 ok
  • 기명 함수 표현식 : 변수명은 c, 함수명은 d
// d()는 c() 안에서 재귀적으로 호출될 때만 사용 가능하므로 사용성에 대한 의문
var c = function d() {
}; // 변수에 함수를 할당, 함수에 또 이름을 적는것. 자주 사용
c(); // 실행 ok
d(); // 에러!

선언문과 표현식의 예시!

console.log(sum(1, 2));
console.log(multiply(3, 4));

function sum(a, b) {
  // 함수 선언문 sum
  return a + b;
};

var multiply = function (a, b) {
  // 함수 표현식 multiply
  return a + b;
};

호이스팅 적용 시

function sum(a, b) {
  // 함수 선언문 sum
  return a + b;
}
var multiply;
console.log(sum(1, 2));
console.log(multiply(3, 4));

multiply = function (a, b) {
  // 함수 표현식 multiply
  return a + b;
};

선언문은 호이스팅이 되지만 표현식은 되지 않는다.


this

변수를 호출한 방법에 의해 결정된다.

1. 전역 공간에서의 this

  • 전역 공간에서의 this는 전역객체
  • 런타임 환경에 따라 this는 window 또는 global를 가리킴(전역 객체를 가르킴.)

2. 메서드로서 호출할 때 그 메서드 내부에서의 this

  • 함수는 스스로 수행 가능 함수명(); => 전역객체
  • 메서드는 자신을 호출한 객체에 대한 동작 수행 객체.함수명()

this의 할당

CASE1 : 함수
호출 주체를 명시할 수 없기 때문에 this는 전역 객체
var func = function (x) {
  console.log(this, x);
};
func(1); 		// Object [global] { ... } 1

CASE2 : 메서드
호출 주체를 명시할 수 있기 때문에 this는 해당 객체(obj)를 의미
var obj = {
  method: func,
};
obj.method(2);		 // { method: [Function: func] } 2

주체 명시 하는 법 : . 이나 [].

Realization


언듯보면 선언문이 좋아보이지만, 나중에한 선언문이 위에 코드에게 영향을 줄 수 있기 때문에 협업 같은 경우에는 표현식 위주로 사용!

0개의 댓글