Code Fix

初級

括弧の閉じ忘れで出る SyntaxError の原因と直し方

丸括弧・波括弧・角括弧の閉じ忘れで出る構文エラーです。Node.jsはファイルの終わりまで読んでから対応が崩れていることに気づくため、エラー行が原因の行と一致しないことがあります。

エラーメッセージの読み方

main.js:2
main.js
ファイル名
2
行番号 — Node.jsが構文解析を諦めた位置
SyntaxError
エラークラス — 実行前の構文チェックで検出されました
missing ) after argument list
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  let message = "Hello";
 2  console.log(message  
                        ^
main.js:2 console.log(message ^^^^^^^ SyntaxError: missing ) after argument list

console.logの呼び出しを閉じる丸括弧が足りません。複数行にまたがる呼び出しでは見落としやすいミスです。

直し方: (空) を ); にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  function greet(name) {
 2    console.log("Hi " + name);
 3   
    ^
 4  greet("Al");
main.js:4 greet("Al"); SyntaxError: Unexpected end of input

greet関数の閉じ波括弧が足りません。Node.jsはファイルの終わりまで読んでから、対応が崩れていることに気づきます。

直し方: (空) を } にします。

この問題を解いてみる →

パターン3

 1  const nums = [1, 2, 3 
                         ^
 2  console.log(nums.length);
main.js:2 console.log(nums.length); ^^^^^^^ SyntaxError: Unexpected identifier 'console'

配列リテラルの閉じ角括弧が足りません。次の行のconsoleまで1つの式として読み込もうとして構文エラーになります。

直し方: (空) を ] にします。

この問題を解いてみる →

パターン4

 1  const obj = { a: 1   
                       ^
 2  console.log(obj);
main.js:2 console.log(obj); ^^^^^^^ SyntaxError: Unexpected identifier 'console'

オブジェクトリテラルの閉じ波括弧が足りません。プロパティを1つ書いただけでは、どこまでが値かNode.jsは判断できません。

直し方: (空) を }; にします。

この問題を解いてみる →

パターン5

 1  function greet(name  {
                       ^
 2    console.log("Hi " + name);
 3  }
 4  greet("Al");
main.js:1 function greet(name { ^ SyntaxError: Unexpected token '{'

引数リストの閉じ丸括弧が足りません。関数の中身を書く波括弧の前に、引数の括弧を閉じる必要があります。

直し方: (空) を ) にします。

この問題を解いてみる →

よくある誤解

エラーが指す行を直しても直らないことがあります。実際の閉じ忘れはもっと上の行にあり、Node.jsはファイル末尾(または次の予期しないトークン)に達するまで検出できません。

実務での勘所

構文エラーがあると、JavaScriptエンジンはファイルを実行する前に全体をひととおり解析(パース)し、そこで文法として成立しないと分かった時点で実行そのものを一切始めません。そのため、閉じ忘れた括弧より前に書いたconsole.logがあっても、そこまでは実行されるだろうという予想に反して1行も出力されないまま終了します。「上から順に実行されるはず」という感覚は、構文エラーが絡む場面では成り立ちません。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)