티스토리 뷰
자스에서의 구문은 세미콜론(;)으로 끝난다. 표현식은 어떤 값을 생성하기 위해 평가되지만 구문은 어떤 일을 하기 위해 실행된다.
표현문
자스 구문 중에서 가장 간단한 형태는 부수 효과가 있는 표현식이다. 할당문이 이러한 표현문의 주요 항목에 속한다.
표현문의 다른 종류로 함수 호출이 있다.
복합문과 빈 구문
하나의 표현식 안에 여러 표현식을 합칠 때에는 쉼표(,) 연산자를 사용한다.
복합문은 자스 문법에서 하나의 구문이 있어야할 곳에 여러 구문을 사용할 수 있게 한다.
빈 구문은 정 반대다.
선언문
var와 function은 각각 변수와 함수를 선언하는 선언문이다. 이러한 선언문은 각각 변수나 함수 이름 같은 식별자를 정의한다. 선언문에서 정의된 식별자는 프로그램 내에서 사용할 수 있고, 이 식별자를 통해 값을 할당할 수도 있다. 선언문은 변수나 함수를 생성하는 중요한 역할을 담당하며, 이를 통해 생성된 변수나 함수는 프로그램 내에서 포함된 여러 구문에서 사용할 수 있다.
var f=function(x){return x+1;} //변수에 함수를 할당하는 표현식
function f(x){return x+1;} //변수 이름을 포함한 구문
함수 선언문으로 정의된 함수는 스크립트나 함수 유효범위의 최상단에 위치하게 되어 해당 유효범위 내에서 사용이 가능하다. var문을 이용한 변수 선언은 유효범위의 최상단에 위치하게 되지만, 최초에 변수를 초기화한 코드는 그대로 유지된다. 하지만 함수 선언문을 이용하면 함수의 이름과 본문 모두 유효범위 최상단에 위치하게 된다. 이때 스크립트나 함수 또는 함수의 중첩 함수에서 선언한 함수를 사용할 수 있다. 이는 자스 함수 선언이 끝나기 전에 호출될 수 있음을 말한다. var문처럼 함수 선언문은 삭제할 수 없는 변수를 만들지만 언제든 값을 바꿀 수 있다.
f(1);
var f=function(x){return x+1;}
//불가능
f(1);
function f(x){return x+1;}
//가능
조건문
조건문은 특정 표현식의 값에 따라 구문을 실행시키거나 건너뛴다.
if
if(표현식) 구문1
else 구문2
else if
else 한다음 if를 했다고 생각하면 쉽다.
switch
switch문은 if문에서처럼 동일한 표현식이 여러 번 반복되는 문제점을 확실히 해결한다.
모든 if문을 swtich문으로 바꿀수는 없다.
switch(n){
case 1:
//1번식
break;
case2:
//2번식
break;
default:
//3번식
break;
}
n이 1이라면 case1의 식부터 끝까지 실행한다. 그래서 보통 break로 탈출시킨다.
default는 항상 실행한다.
루프
while
while(표현식) 구문
표현식이 참이라면 구문을 실행한다.
do while
do{구문} while(표현식);
do/while 루프는 표현식이 테스트되는 시점이 루프의 처음이 아니라 마지막이라는 점을 제외하고는 while 루프와 유사
for
for(초기화; 테스트; 증가) 구문
for문을 사용하면 while문보다 좀더 편리하게 루프를 만들 수 있다.
for/in
for(변수 in 객체) 구문
for(var i=0;i<a.length;i++)
console.log(a[i]);
//두 식은 같다
for(var p in o)
console.log(o[p]);
점프문
인터프리터가 점프문을 만나면 소스 내의 특정 위치로 건너뛴다.
continue문을 만나면 나머지 루프 몸체에 있는 구문을 생략하고 새 루프 시작점으로 건너뛴다.
return문을 만나면 함수가 호출된 붑분의 코드로 건너뛰고, 이 때 호출부에 값을 전달한다.
throw문은 예외를 발생시키고, try/catch/finally문에서 예외를 다루는 코드 블록과 함께 쓰인다.
레이블
어떤 구문에라도 그 앞에 식별자 이름과 콜론(:)을 넣음으로써 레이블을 붙일 수 있다.
식별자: 구문
mainloop: while(token!=null){
//코드
continue mainloop;
//코드
레이블은 중첩될 수 있다.
break
break문을 사용하면 break문을 감싸고 있는 가장 안쪽의 루프 혹은 swtich문에서 즉시 빠져나온다.
break 키워드 뒤에 레이블이 따라올 수 있다.
break labelname;
원하는 곳으로 빠져나가길 원한다면 레이블을 사용하자
continue
continue문은 break문과 유사하다. 다만 루프를 빠져나오지 않고 새로운 반복을 시작한다는 점이 다르다.
conntinue문 역시 레이블과 함께 쓰일 수 있다.
while 루프 : 루프의 시작 부분에 지정된 표현식을 다시 테스트하고 true이면 몸체 처음부터 실행
do/while 루프 : 일단 루프의 끝 부분까지 건너뛰고 루프 조건을 테스트하여 true이면 몸체 처음부터 실행
for 루프 : 증가 표현식을 평가한 후, 테스트 표현식을 테스트하여 다음 반복을 수행할지 여부 판단
for/in 루프 : 다음 차례의 프로퍼티 일믕르 루프 시작에서 지정된 변수에 할당한 후 루프를 다시 시작
return
함수를 호출하는 것 역시 표현식이고, 모든 표현식은 값이 있기 마련이다. return문은 함수 호출 표현식의 값, 즉 함수에서 반환되는 값을 지정하는데 쓰인다. return은 오직 함수 몸체 내부에서만 나타날 수 있다.
함수내에 return이 없다면 undefined를 반환한다. return이 실행되면 남은 구문이 있어도 함수를 호출한 지점으로 반환된다.
throw
예외란 예외적인 상황이나 에러가 발생했음을 가리키는 신호다.
예외를 발생시키는 것(throw)은 그런 에러나 예외 상황을 알린다는 의미다.
예외를 잡아내는 것(catch)은 예외를 처리한다는 의미다.
throw 표현식;
Error 클래스와 그 하위 클래스는 자스 인터프리터가 에럴를 발생시킬 때 주로 사용하고 있고, 코드에서 임의로 사용할 수 있다. Error 객체는 에러의 타입을 담고 있는 name 프로퍼티와 Error 클래스 생성자 함수에 넘기는 문자열 값을 담고 있는 message 프로퍼티를 갖고 있다. 예외 처리기를 찾을 수 없는 경우 해당 예외는 에러로 취급되고 사용자에게 보고된다.
try/catch/finally
try절은 단순히 예외가 발생할지도 모른느 코드 블록을 정의하는 역할을 한다. try 블록 다음에는 catch절이 이어진다. catch절은 try 블록 내부에서 예외가 발생할 경우 호출되는 구문 블록이다. catch절 다음에는 finally 블록이 올 수 있는데, 여기에서는 try 블록에서 일어난 일에 관계없이 항상 실행이 보장되어야 할 뒷정리용 코드가 포함된다. catch나 finallly 블록은 생략 가능하다. 하지만 try 블록은 적어도 이들 중 하나 이상의 블록과 함께 사용되어야 한다.
기타 구문
with
with문은 유효범위 체인을 임시로 변경하려 할 때 쓰인다.
with(객체) 구문
with문은 유효범위 체인의 첫 번째에 객체를 추가한다. 그 후에 구문을 실행한 다음, 유효범위 체인을 객체를 추가하기 전 상태로 되돌려 놓는다.
with문은 엄격한 모드에서 사용할 수 없고 가능한 일반모드에서도 사용하지 말아야한다.
with(document.forms[0]){
//여기서 form 엘리먼트에 직접 접근할 수 있다.
name.value="";
address.value="";
}
//아래처럼 할 수도 있어
var f=document.forms[0];
f.name.value="";
f.address.value="";
debugger
debugger문은 평소에는 아무것도 하지 않는다. 하지만 만약 디버거 프로그램을 사용할 수 있고 디버거가 실행 중일 때, 자스 구현체는 해당 위치에서 정의된 코드 디버깅을 수행한다. 예를 들어, 함수 f가 인자 없이 호출되어 예외가 발생하고 있고, 어느 시점에서 해당 함수 호출이 발생하는지 찾기 힘들다고 가정하면
function f(o){
if (o===undefined) debugger; //디버깅을하기위한 임시코드
... //기존의 코드는 여기서부터 시작한다.
여기서 함수 f가 인자 없이 호출되거나 인자 값이 undefined일 경우 코드 실행이 잠시 중단되고 디버거가 실행될것이다.
use strict
use strict 지시어와 일반적인 구문과는 크게 두 가지 차이점이 있다.
1. 키워드 목록에 포함되지 않는다.
2. 스크립트의 시작 부분이나 함수 몸체의 시작 부분에만 올 수 있다. 하지만 반드시 스크립트나 함수의 시작 부분이 될 필요는 없다.
자바스크립트 구문 요약
'책 > 자바스크립트 완벽 가이드' 카테고리의 다른 글
7장 배열 (0) | 2020.11.08 |
---|---|
6장 객체 (0) | 2020.11.07 |
4장 표현식과 연산자 (0) | 2020.11.05 |
3장 타입, 값, 변수 (0) | 2020.11.03 |
2장 어휘구조 (0) | 2020.11.02 |