SyntaxError: function statement requires a name

메세지

Syntax Error: Expected identifier (Edge)
SyntaxError: function statement requires a name [Firefox]
SyntaxError: Unexpected token ( [Chrome]

μ—λŸ¬ νƒ€μž…

무엇이 잘λͺ»λ˜μ—ˆμ„κΉŒ?

ν•¨μˆ˜ ꡬ문(Function statement)은 이름이 ν•„μˆ˜μž…λ‹ˆλ‹€. ν•¨μˆ˜κ°€ μ •μ˜λœ 방법에 따라 ν•¨μˆ˜μ˜ 이름을 μ§“κ±°λ‚˜ ν•¨μˆ˜ ν‘œν˜„μ‹(Function expression) IIFE으둜 μž‘μ„±ν•˜κ±°λ‚˜, ν•¨μˆ˜κ°€ λ§₯락에 맞게 μ œλŒ€λ‘œ μž‘μ„±λ˜μ—ˆλŠ”μ§€ 확인해야 ν•©λ‹ˆλ‹€.

예제

ꡬ문 vs ν‘œν˜„μ‹

ν•¨μˆ˜ ꡬ문(λ˜λŠ” ν•¨μˆ˜ μ„ μ–Έ)은 이름이 ν•„μš”ν•˜λ―€λ‘œ μ•„λž˜ μ˜ˆμ œλŠ” λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€:

function () {
  return 'Hello world';
}
// SyntaxError: function statement requires a name

λŒ€μ‹  ν•¨μˆ˜ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

var greet = function() {
  return 'Hello world';
};

λ˜λŠ”, μ„ μ–Έν•˜μžλ§ˆμž λ°”λ‘œ μ‹€ν–‰λ˜λŠ” IIFE (Immediately Invoked Function Expression)λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 경우 λͺ‡ 개의 κ΄„ν˜Έκ°€ 더 ν•„μš”ν•©λ‹ˆλ‹€:

(function () {

})();

λ ˆμ΄λΈ”μ„ 뢙인 ν•¨μˆ˜

λ§Œμ•½ ν•¨μˆ˜ λ ˆμ΄λΈ”μ„ μ‚¬μš©ν•˜λŠ” 경우 function ν‚€μ›Œλ“œ 뒀에 ν•¨μˆ˜ 이름이 ν•„μš”ν•˜λ―€λ‘œ μ•„λž˜ μ˜ˆμ œλŠ” λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€:

function Greeter() {
  german: function () {
    return "Moin";
  }
}
// SyntaxError: function statement requires a name

μ•„λž˜ μ˜ˆμ œλŠ” λ™μž‘ν•©λ‹ˆλ‹€:

function Greeter() {
  german: function g() {
    return "Moin";
  }
}

객체 λ©”μ†Œλ“œ

λ§Œμ•½ 객체 λ©”μ†Œλ“œλ₯Ό λ§Œλ“œλŠ” 경우 λ¨Όμ € 객체λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€. 객체 λ©”μ†Œλ“œμ˜ 경우 μ•„λž˜ μ˜ˆμ œμ™€ 같이 function ν‚€μ›Œλ“œ 뒀에 이름이 없어도 μ •μƒμ μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

var greeter = {
  german: function () {
    return "Moin";
  }
};

콜백 ꡬ문

μ½œλ°±μ„ μ‚¬μš©ν•˜λŠ” 경우 ꡬ문을 확인해야 ν•©λ‹ˆλ‹€. κ΄„ν˜Έμ™€ μ‰Όν‘œλŠ” ꡬ문을 μ–΄λ ΅κ²Œ λ§Œλ“­λ‹ˆλ‹€.

promise.then(
  function() {
    console.log("success");
  });
  function() {
    console.log("error");
}
// SyntaxError: function statement requires a name

μ˜¬λ°”λ₯΄κ²Œ λ³€κ²½ν•˜λ©΄:

promise.then(
  function() {
    console.log("success");
  },
  function() {
    console.log("error");
  }
);

같이 보기