4주차 반복문 스터디 발표 후 호재님의 질문
do/while 문의 끝에는 세미콜론(;) 넣어야한다 고 되어있는데 빼면 어떻게 되나요?
'do/while 문 끝에는 반드시 세미콜론이 붙습니다.' 라는 구문이 스터디 교재에 명시되어있었기 때문입니다.
빼보았지만 아무 문제가 없었습니다.
그래서 우선 JS에서의 세미콜론에 대해 알아보았습니다.
다른프로그래밍언어들과 같이 자바스크립트에서 세미콜론(;)은 기본적으로 문장을 구분하기 위해 사용됩니다.
하지만 줄바꿈(개행) 혹은 한줄짜리 중괄호 { }를 사용한다면 세미콜론이 불필요합니다.
var i; // 변수 선언
i = 5; // 변수 할당
i = i + 1; // 변수 할당
i++; // 위와 같음
var x = 9; // 변수 선언+할당
var fun = function() {...}; // 변수 선언, 함수 선언 등
alert("hi"); // 함수 호출
위 경우들은 세미콜론을 끝에 붙이지만 필수적이진 않습니다.
세미콜론이 필수적인 경우는 오직 2개 이상의 구문을 한 줄에 작성할 때입니다.
var i = 0; i++; // <-- 세미콜론 필수
var i = 0; // <-- 세미콜론 선택적
i++; // <-- 세미콜론 선택적
중괄호{ } 뒤에는 세미콜론을 붙이지 않습니다. (var obj={ };
와 같은 할당문은 예외) 붙인다고 해서 오류가 발생하진 않습니다.
if (...) {...} else {...}
for (...) {...}
while (...) {...}
// BUT:
do {...} while (...);
function (arg) { ... } // 세미콜론ㄴㄴ }
원주의 생각
do{ ... }while(조건식){ 다른 코드 어쩌구 저쩌구}
설령 뒤에 세미콜론을 붙여주지 않았더라도 ASI(자동세미콜론삽입)라는 자바스크립트엔진에 내장된 기능이 있어
// 예시 1
var number = 100;
//예시 2
console.log(number);
뒤에 세미콜론을 안써도 잘 출력됩니다.
하지만 ASI가 있으니까 세미콜론 작성규칙을 꼭 지켜야하는가에 대한 의견 분분
function test1 () {
return {
message : 'Hello World`
}
}
function test2 ()
{
return
{
message : 'Hello World'
}
}
위의 예시에서 test1와 test2는 같은 결과를 출력할 것 같지만
function test 2 ()
{
return; // ASI가 return에 세미콜론 붙여버리면서
// 아래의 코드는 무시
{
message : 'Hello World'
}
}
return2 에서
ASI가 return 뒤에 자동으로 세미콜론을 삽입해주면서 undefined를 리턴하게 됩니다.
참고한 사이트들
https://www.codecademy.com/forum_questions/507f6dd09266b70200000d7e