객체지향에서 객체는 우리눈에 보이는 구체화된 대상을 의미
객체는 속성과 행위로 정의 할 수 있으며 객체를 정의할 수 있는 틀을 클래스(Class)라고 한다.
클래스는 멤버변수와 메서드로 정의하게 되고 클래스로 부터 객체를 생성(인스턴스)해서 사용하는 개념
this는 메소드를 호출한 객체가 저장되어 있는 속성을 말한다.
const test = {
prop: 42,
func: function() {
return this.prop;
},
};
console.log(test.func());
// expected output: 42
42
자바스크립트에서 스코프란 어떤 변수들에 접근할 수 있는지를 정의.
스코프의 종류에는 전역 스코프(Global scope)와 지역 스코프(Local scope)가 있다.
변수가 함수 바깥이나 중괄호 바깥에 선언되었다면 전역스코프다.
전역 변수를 선언한다면 모든 곳에서 해당 변수를 사용할 수 있다.
코드의 특정 부분에서만 사용할 수 있는 변수는 지역 스코프에 있다고 할 수 있습니다.
이런 변수들은 지역 변수라고 말합니다.
자바스크립트에서는 두 가지의 지역 변수인 함수 스코프(function scope)와 블록 스코프(block scope)가 존재한다
함수 내부에서 변수를 선언하면 그 변수는 선언한 변수 내부에서만 접근할 수 있다.
function hello(){
const hi = "hi dongdong";
console.log(hi);
}
hello();
// Output = hi dongdong
console.log(hello);
// Error
중괄호 내부에서 const 또는 let으로 변수를 선언하면 그 변수들은 중괄호 블록 내부에서만 접근할 수 있다
{
const hi = "hi dongdong";
console.log(hi);
// Output"hi dongdong"
}
console.log(hi)
// Error
함수 내부에 함수를 작성할 때마다 클로저를 생성한 것.
내부에 작성된 함수를 클로저라고 부른다.
클로저는 나중에 외부 함수의 변수를 사용할 수 있기 때문에 보통 반환하여 사용한다.
따라서 클로저는 외부 함수의 변수에 접근할 수 있기 때문에 사이드 이펙트를 제어하거나 private 변수를 생성하기 위해 사용되어진다.
즉 함수 밖에서 선언된 변수를 함수 내부에서 사용할 때 클로저가 생성된다.