ㅁ 변수란?
ㅁ 식별자
ㅁ 변수 이름의 저장위치
변수이름을 비롯한 식별자는 [execution context]에 등록된다.
[execution context]
자바스크립트 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행결과를 관리하는 영역이다.
이를통해, 식별자와 스코프를 관리한다.
ㅁ 변수선언의 실행시점과 변수 호이스팅
[hoisting]
인터프리터가 변수와 함수의 메모리공간을 선언 전에 미리 할당하는 것을 의미한다.
var 로 선언시, undefined로 변수를 초기화 하지만,
let, const의 경우 호이스팅 시 변수를 초기화하지 않는다.
ㅁ 값의 할당
ㅁ 리터럴
ㅁ 표현식
ㅁ 문
ㅁ 데이터 타입
ㅁ 템플릿 리터럴
ㅁ 심벌타입
ㅁ 동적 타이핑
ㅁ 그 외의 연산자
ㅁ 블록문
ㅁ 조건문
ㅁ 반복문
ㅁ 타입변환이란?
ㅁ 암묵적 타입변환
ㅁ 명시적 타입변환
개발자의 의도에 따라 명시적으로 타입을 변경하는 방법이다.
built-in method를 사용하는 방법,
생성자 (new 연산자) 없이 호출하는 방법
문자열 연결 연산자를 활용하는 방법
ex1) 생성자 > String(1) => "1"
ex2) built-in method > (1).toString() => "1"
ex3) 문자열 > 1 + "" => "1"
ㅁ 단축평가
※ [null] or [undefined] 가 아닌지 확인하고 프로퍼티 참조할때
var elem = null;
var value = elem.value; // type error
var elem = null
var value = elem && elem.value;
// elem값이 true면 elem.value 값을 사용한다.
// elem값이 false면 elem 값을 사용한다.
※ 옵셔널 체이닝 연산자
var elem = null
var value = elem?.value;
console.log(value); // undefined
※ null 병합 연산자
var foo = null ?? 'default string';
console.log(foo);
ㅁ 객체란?
자바스크립트는 객체 기반의 프로그래밍 언어이며, 원시값을 제외한 나머지값은 모두 객체다.
객체는 프로퍼티로 구성된 집합이며, 프로퍼티는 key / value 로 구성된다.
[instance]
클래스에 의해 생성되어 메모리에 저장된 실체.
ㅁ 프로퍼티
ㅁ 메서드
ㅁ 프로퍼티의 접근
ㅁ 원시타입 값 (primitive type)
ㅁ 객체(참조) 타입 값 (object / reference type)
원시값을 갖는 변수를 다른 변수에 할당하면 [값에 의한 전달]
참조값을 갖는 변수를 다른 변수에 할당하면 [참조에 의한 전달]
ㅁ 값에 의한 전달
ㅁ 객체
- 얕은복사
객체를 프로퍼티 값으로 갖는 객체의 경우 얕은 복사는 단 한 단계까지 복사하는 것을 말한다.
- 깊은 복사
재귀적으로 원시값이 나올때까지 복사하는 것.
EX) Shallow Copy
-- 원시값 복사시
const a = 1;
let b = a;
b = 2;
console.log(a) // 1;
consoel.log(b) // 2;
-- 참조값 복사시
const a = {number :1};
let b = a;
b.number = 2
console.log(a); // number : 2
console.log(b); // number : 2
ex)
const obj = {
a : 1;
b : {
c: 2,
},
};
const copiedObj = Object.assign({},obj);
copiedObj.b.c = 3;
obj === copiedObj // false
obj.b.c === copiedObj.b.c // true
ex - 1)
const obj = {
a: 1;
b: {
c: 2,
},
};
function copyObj(obj) {
const result = {};
for (let key in obj) {
if (typeof obj[key] === 'object') {
result[key] = copyObj(obj[key]);
} else {
result[key] = obj[key];
}
}
return result;
}
const copiedObj = copyObj(obj);
copiedObj.b.c = 3
obj.b.c === copiedObj.b.c //false
ex - 2)
const obj = {
a: 1,
b: {
c: 2,
},
};
const copiedObj = _.cloneDeep(obj);
copiedObj.b.c = 3
obj.b.c === copiedObj.b.c //false
ㅁ 함수란
ㅁ 함수 생성시점과 함수 호이스팅
ex)
console.dir(add);
console.dir(sub);
function add(x, y) {
return x + y;
} // f add(x, y)
var sub = function(x, y){
return x - y;
} // 변수 선언이되기때문에 함수실행x
ㅁ Function 생성자 함수
ex)
var add1 = new Function('x','y', 'return x+y')
var add2 = function (x, y) { return x + y; }
console.log(add(2,5));
// 거의 안쓴다. (클로저를 생성하지 않고, 선언문/표현식과 다르게 동작한다.
ㅁ 화살표 함수
ㅁ 다양한 함수의 형태
즉시실행함수
익명 함수를 사용하는 것이 일반적이다.
즉시 실행되며, 단 한번만 호출되며 다시 사용할 수 없다.
재귀함수
자신을 호출 하는 함수를 재귀함수라고 한다.
ex)
function countdown(n) {
if (n < 0) return;
countdown(n - 1);
}
중첩함수
함수 내부에 정의된 함수를 중첩 함수 또는 내부 함수라 한다.
ex)
function outer() {
var x = 1;
function inner() {
var y = 2;
console.log(x + y) ; // 3
}
inner () ;
outer();