When writing JavaScript or Google Apps Script (GAS), you may encounter an error like this:
SyntaxError: Unexpected end of input
This article explains why this error occurs and how to fix it, with practical patterns that developers commonly encounter. We'll focus on the pain points where GAS and JavaScript beginners often stumble, with solutions to prevent recurrence.
What Does SyntaxError: Unexpected end of input Mean?
In short, this error means:
"Your code ends prematurely (something is not closed)."
JavaScript's parser expects the code to continue, but the code ends unexpectedly. This causes the error.
Common Cause #1: Forgot to Close Curly Braces {}
This is the most frequent cause.
Example: Missing closing brace in a function
function test() {
Logger.log("test");
Missing one }.
Example: Missing closing brace in an if statement
function check() {
if (true) {
Logger.log("OK");
}
Missing one }.
How to Fix It
- When you write
{, immediately write} - Use your editor's indentation features
- Use bracket-matching features
function test() {
Logger.log("test");
}
Common Cause #2: Forgot to Close Parentheses ()
This commonly occurs in function calls and conditional expressions.
Example: Unclosed function call
Logger.log("Hello"
Missing ).
Example: Unclosed conditional expression
if (x > 10 {
Logger.log("OK");
}
Missing ) in the if condition.
How to Fix It
- Close parentheses immediately after opening them
- Use editor autocomplete
Logger.log("Hello");
if (x > 10) {
Logger.log("OK");
}
Common Cause #3: Forgot to Close Square Brackets []
This occurs in array definitions or object access.
Example: Unclosed array definition
const list = [1, 2, 3
Missing ].
How to Fix It
- Close arrays immediately after defining them
const list = [1, 2, 3];
Common Cause #4: Unclosed String Quotes
The string definition is incomplete.
Example: Unclosed double quotes
const message = "Hello World
Logger.log(message);
Missing closing ".
How to Fix It
- Always close strings with matching quotes
- Use template literals (backticks) for multi-line strings
const message = "Hello World";
Logger.log(message);
// For multi-line
const multiLine = `
Line 1
Line 2
`;
Common Cause #5: Deep Nesting Makes Matching Difficult
In complex code, it can become unclear which bracket closes where.
Example: Deep nesting structure
function main() {
if (true) {
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) {
Logger.log(i);
}
}
// Missing } here
}
How to Fix It
- Keep indentation properly aligned
- Use your editor's code folding feature
- Extract complex logic into separate functions
function main() {
if (true) {
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) {
Logger.log(i);
}
}
}
}
Common Cause #6: Incomplete Code from Copy-Paste
When copying and pasting code, the last part may be missing.
How to Fix It
- Check the entire copied code
- Verify bracket matching
Basic Debugging Checklist
When you encounter SyntaxError: Unexpected end of input, check these points in order:
- Do the numbers of
{and}match? - Do the numbers of
(and)match? - Do the numbers of
[and]match? - Are string quotes closed?
- Is indentation properly aligned?
- Is copied code complete?
These six points solve most cases.
Best Practices to Prevent This Error
// Close brackets immediately after opening
function test() {
// Write code here
}
// Keep indentation aligned
if (true) {
Logger.log("OK");
}
// Use editor auto-formatting features
Using Visual Studio Code or Apps Script Editor
Most editors have features to check bracket matching:
- Bracket highlighting
- Indentation guides
- Autocomplete
- Syntax checking
Using these features helps prevent errors.
Summary
SyntaxError: Unexpected end of input means "something is not closed."
In GAS especially, just being aware of:
- Function curly braces
- Conditional parentheses
- Array square brackets
can drastically reduce how often this error occurs.
When this error appears, the first step is to check "do the bracket counts match?" Make full use of your editor's features for comfortable coding.