JavaScript는 괄호를 기준으로 함수 호출의 시작과 끝을 판단합니다. 따라서 함수 호출이 닫히기 전에 문법 요소가 하나라도 빠지면 “SyntaxError: missing ) after argument list” 오류가 발생합니다.
이 글에서는 해당 오류의 의미와 발생 원인을 살펴보고, 실제 예제를 통해 문제를 해결하는 방법까지 단계별로 알아보겠습니다.
SyntaxError: missing ) after argument list란?
이 오류 메시지는 함수 호출 내부에 문법 오류가 존재한다는 의미입니다. 주로 다음과 같은 상황에서 발생합니다.
- 인수 목록 마지막에 쉼표(,)를 추가했지만, 그 뒤에 또 다른 인수가 오지 않은 경우
- 인수를 구분해야 할 쉼표가 문자열 안쪽에 포함되어 버린 경우
JavaScript는 쉼표 뒤에 항상 또 다른 인수가 올 것으로 기대합니다. 만약 쉼표 뒤에서 새로운 인수를 찾지 못하면 코드가 정상적으로 파싱되지 않고, 닫는 괄호에서 문법 오류를 일으키게 됩니다.
이 오류를 만났다면, 에러 메시지가 가리키는 코드 부분의 문법을 꼼꼼히 확인하세요. 모든 괄호가 짝이 맞는지, 그리고 함수 호출 내부에서 쉼표가 올바르게 사용되었는지 점검하는 것이 중요합니다.
오류 발생 예제
학생이 시험에 합격했는지 불합격했는지 판정하는 프로그램을 작성해 보겠습니다. 먼저 학생의 성적과, 합격 여부를 알려주는 메시지 변수를 정의합니다.
var grade = 57;
var message = "This student has X their test.";
여기서 message 변수에는 placeholder 역할을 하는 문자 “X”가 들어 있습니다. 이 값은 프로그램 뒷부분에서 “passed”(합격) 또는 “failed”(불합격)로 대체될 예정입니다.
판정 기준은 간단합니다. 성적이 53점을 넘으면 합격, 그렇지 않으면 불합격입니다.
이제 if 문을 사용해 학생의 합격 여부를 판정하는 코드를 작성해 보겠습니다.
if (grade > 53) {
message.replace("X," "passed");
} else {
message.replace("X", "failed");
}
if 문과 else 문을 사용해 조건을 평가합니다. if 조건이 참이면 “message” 문자열의 “X”가 “passed”로 바뀌고, 거짓이라면 “failed”로 바뀌도록 의도한 코드입니다.
마지막으로 결과 메시지를 콘솔에 출력합니다.
console.log(message);
코드를 실행하면 어떻게 될까요?
Uncaught SyntaxError: missing ) after argument list
예상대로 문법 오류가 발생했습니다.
해결 방법
JavaScript가 코드를 실행하지 못한 이유는, 함수 호출 중 하나에 실수가 있었기 때문입니다. 인수 목록(argument list)은 함수 호출에만 존재하기 때문에, 어느 함수 호출에 문제가 있는지 좁혀볼 수 있습니다.
문제가 된 함수 호출 부분을 자세히 살펴보겠습니다.
message.replace("X," "passed");
message.replace("X", "failed");
두 번째 문장은 문법적으로 올바르지만, 첫 번째 문장에는 오류가 있습니다. 잘 보면 쉼표가 첫 번째 문자열 바깥이 아니라 문자열 안쪽에 들어가 있습니다. 즉, "X,"처럼 쉼표가 문자열의 일부가 되어 버린 것입니다.
이렇게 되면 인수 목록에 두 개의 값이 연달아 붙어 있는 형태가 되어, JavaScript 입장에서는 유효하지 않은 문법이 됩니다. 인수는 반드시 쉼표로 구분되어야 하기 때문입니다.
해결 방법은 간단합니다. 쉼표를 문자열 안에서 밖으로 옮겨주면 됩니다.
message.replace("X", "passed");
쉼표를 문자열 외부로 이동한 후 코드를 다시 실행해 보겠습니다.
"This student has passed their test."
이번에는 코드가 정상적으로 실행되며, 의도한 결과 메시지가 출력됩니다.
마무리
“SyntaxError: missing ) after argument list” 오류는 함수 호출이 올바르게 평가되지 못할 때 발생합니다. 이 오류를 해결하려면 인수들이 올바른 형식으로 작성되었는지 확인하고, 특히 함수 호출 내의 모든 인수가 쉼표로 제대로 구분되어 있는지 꼼꼼하게 점검하세요.
이제 여러분도 이 문법 오류를 전문가처럼 빠르게 진단하고 수정할 수 있을 것입니다.