: 함수에 인자를 넘기지 않거나 undefined를 전달했을 때 적용
📍 요즘은 arguments 대신에 레스트인자( ...) 을 많이 쓰는 추세
📍 try이후에는 catch, finally 중 하나만 필수! (하지만 둘다 같이 써도 상관 없음)
🔹 finally : 어떤일이 있어도 반드시 실행되는 코드
function foo() {
try {
return 42;
}
finally {
console.log( "Hello" );
}
console.log( "실행될 리 없지!" );
}
console.log( foo() );
//Hello
//42
for (var i = 0; i<10; i++) {
try {
continue;
}
finally {
console.log( i );
}
}
// 0 1 2 3 4 5 6 7 8 9
⇒ continue문 때문에 console.log(i)문은 루프 순회 끝 부분에서 실행,
⇒ 그러나 i++
로 인덱스가 수정되기 직전까지 꾸준히 실행되므로 0—9가 콘솔창에 표시
📍 finally절의 return은 그 이전에 실행된 try나 catch 절의 return을 덮어쓰는 특출한 능력이 있음.
(단, 반드시 명시적으로 return문을 써야함)
switch 표현식과 case 표현식 간의 매치 과정은 ===
알고리즘과 똑같음
⇒ 강제변환이 일어나는 동등 비교 ==
를 이용할 때 논리 연산자 주의
var a = 10;
switch (a) {
case 1:
case 2:
//절대 들어오지 않음
default:
console.log("default");
case 3:
console.log("3")
case 4:
console.log("4");
}
//default
//3
자바스크립트 : 컴파일러 언어
: 문자열을 나누어 토큰이라는 의미 있는 조각으로 만드는 과정
var a = 2;
를 토큰으로 나누면
⇒ var, a, =, 2, ; 로 나뉘게 됨
(빈칸은 의미가 있느냐 없느냐에 따라 포함될 때가 있고 안될 때가 있음)
: 토큰 배열을 프로그램의 문법 구조를 반영하여 중첩 원소를 갖는 트리 형태로 바꾸는 과정
📍 AST : 파싱의 결과로 만들어진 트리
var a=2
)a
), 대입 수식2
): AST를 컴포터에서 실행 코드로 바꾸는 과정
var a=2
에 엔진이 어떻게 접근할까?
var a
를 만나면 스코프에게 변수 a가 특정한 스코프 컬렉션 안에 있는지 물음a=2
대입문을 처리하기 위해 나중에 엔진이 실행할 수 있는 코드 생성a = 2
console.log(a)
📍 LHS검색과 RHS검색 모두 수행
function foo(a) {
console.log( a ); //2
{
foo( a );
a=2
가 LHS검색중첩 스코프 탐사 시 사용하는 규칙
ReferenceError
발생TypeError
발생