22.04.14(목)
스파르타코딩클럽 리액트 심화반 - 1주차 과정
변수 생성의 3단계
var
let
const
hoisting(호이스팅)과 TDZ(Temporal Dead Zone, 일시적 사각지대)
hoisting(호이스팅) : 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것
var : var로 선언한 객체는 함수의 최상위로 호이스팅되기 때문에, 실행될 일 없는 구문 속에 있어도 선언이 된다.
let, const : 호이스팅이 되지만, 선언을 호이스팅해도 초기화 전까지 메모리에 공간이 없다. 그래서 변수를 참조할 수 없기 때문이다. (TDZ 라고 함)
변수명 : 숫자로 시작할 수 없고, _와 $를 제외한 특수문자를 쓸 수 없다.
숫자형
: -(2^53-1) ~ (2^53-1)까지 지원BigInt형
문자형
boolean형
)undefined
null
심볼형
객체형
(다음 강의에서 조금 더 알아봅니다!)typeof("123") // 'string'
{...}
← 중괄호 안에 여러 쌍의 프로퍼티를 넣을 수 있다.key : value
로 구성const my_cat = {
name: "perl",
status: "좀 언짢음",
}
my_cat.name = "펄이";
console.log(my_cat) // "펄이"
my_cat = {name: "perl2", status: "많이 언짢음"}; // ERROR 발생
자바스크립트는 함수를 특별한 값 취급
함수 사용 방식
function cat() {
console.log('javascript');
}
let cat = function() {
console.log('perl');
}
// 화살표 함수
let cat2 = () => {
console.log('perl2');
}
함수 선언문 vs 함수 표현식
지역 변수와 외부 변수
let a = 'a';
let b = 'b';
let c = 'outter!';
const abc = () => {
let b = 'inner!';
c = 'c';
let d = 'd';
console.log(a, b, c, d);
}
console.log(a, b, c, d); // a, b, outter, undefined
abc(); // a, inner, c, d
// a : 광역변수 / b : 내부 변수 우선 적용 / c: 재할당 / d: 지역변수
console.log(a, b, c, d); // a, b, c, undefined
// b : 외부 변수 적용 / c: 재할당 / d: 지역변수
콜백 함수 : 함수를 값처럼 전달할 때, 인수로 넘겨주는 함수
const playWithCat = (cat, action) => {
action(cat);
}
const useBall = (cat) => {
alert(cat+"과 공으로 놀아줍니다.");
}
//playWithCat 함수에 넘겨주는 useBall 함수가 콜백 함수이다
playWithCat("perl", useBall); // perl과 공으로 놀아줍니다.
Javascript는 클래스 기반 언어가 아니다.
자바스크립트는 프로토타입 기반 동적 언어이다.
[프로토타입 객체와 프로토타입 링크]
위 예제에서 우리는 두 가지 프로토타입을 배웠어요.
하나는 프로토타입 객체, 또 하나는 프로토타입 링크([[Prototype]](숨김 프로퍼티)가 참조하는 값과 proto )예요.
아직까지 면접 질문에 자주 출몰하고, 프로토타입 링크를 이야기할 때 proto 를 써서 이야기 하지만, proto 를 사용하는 방식은 구식이에요. (deprecated되었거든요.)
면접을 대비한다면 위 예제처럼 proto 로 직접 접근하는 방식을 알아두는 편이 좋지만, 그게 아니라면 가급적 Object.getPrototypeOf()를 이용해 참조하고, 프로토타입 체인에 연결할 때는 Object.create() 를 이용해 연결합시다!