일급 객체는 다음의 조건을 만족한다.
1. 이름이 없는 리터럴로 생성할 수 있다.
2. 변수나 자료구조(객체, 배열)에 저장할 수 있다.
3. 함수의 매개변수에 전달할 수 있다.
4. 함수의 반환 값으로 사용할 수 있다.
// 무명의 리터럴로 저장할 수 있고 변수에 저장할 수 있음
const increase = function (num) {
return ++num;
}
const decrease = function (num) {
return --num;
}
// 매개변수에 전달할 수 있음.
function makeCounter (predicate) {
let num = 0;
// 함수의 반환값으로 사용
return function() {
num = predicate(num);
return num;
}
}
일급 객체로서 함수가 가지는 가장 큰 특징은 일반 객체와 같이 함수의 매개변수에 전달될 수 있으며 함ㅅ의 반환 값으로 사용할 수 있다는 것. => 함수형 프로그래밍을 가능하게 한다.
외부 상태를 변경하지 않고 외부 상태에 의존하지 않는 함수를 순수함수라고 함. 순수 함수를 통해 사이드 이펙트를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이려는 프로그래밍 패러다임을 함수형 프로그래밍이라고 함.
객체지향 프로그래밍은 프로그램을 명령어 또는 함수의 목록으로 보는 전통적인 명령형 프로그래밍의 절차지향적 관점에서 벗어나 여러 개의 독립적 단위 즉 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임이다.
자바스크립트는 객체지향 프로그래밍 뿐 아니라 명령형, 함수형 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어. 객체지향 프로그래밍에서 프로토타입 기반의 객체지향 프로그래밍 언어이다.
자바스크립트에서 객체를 만들기 위해서 객체 자신을 만드는 데 사용되는 원형인 프로토타입 객체를 사용하여 객체를 생성 => 이때 만들어진 객체 안에 __proto__
속성이 자산울 만들어낸 원형을 의미하는 프로토타입 객체를 참조하는 링크가 숨겨져 있음. 이 숨겨진 링크를 프로토타입이라고 한다.
오타나 문법 지식의 미비로 인한 실수를 줄여 안정적인 코드를 생산하기 위해 ES6에 추가된 모드.
strict mode는 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다.
개발자가 모든 기능을 구현하지 않고, 편하게 개발할 수 있도록 자바스크립트에서 기본적으로 제공하는 객체
자바스크립트에서 객체는 크게 3개의 객체로 분류할 수 있음
래퍼 객체는 원시 타입을 마치 객체 타입처럼 사용하는 과정 속에서 생기는 임시 객체. 원시 타입인 Number, String, Boolean으로 특정된다.
이는 원시값인 문자열, 숫자, 불리언 값의 경우 이들 원시값에 대해 마치 객체처럼 닷(.)노테이션 표기법으로 접근하면 자바스크립트 엔지이 일시적으로 원시값을 연관된 객체로 변환해주기 때문이다.
즉, 원시값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌린다.
바인딩이란 식별자와 값을 연결하는 과정을 의미.
예를 들어, 변수 선언은 변수 이름(식별자)과 확보된 메모리 공강의 주소를 바인딩하는 작업.
this 바인딩은 this(키워드로 분류되나 식별자 역할)와 this가 가리키는 객체를 바인딩하는 것