Crazy Developer
Crazy Developer

Reputation: 27

Why error "unexpected token" in first line of function definition?

Why do I get an error saying "Unexpected token" at the first line of the following code that defines the function calcTotal?

calcTotal: function(type) {
    sum = 0;
    data.allItems[type].forEach(function(cur) {
        sum = sum += cur.value();
    })
    data.totals[type] = data.totals[type] + sum;
}

Upvotes: 0

Views: 135

Answers (2)

trincot
trincot

Reputation: 351369

Function statements require a function name. So this is not a valid statement:

calcTotal: function(type) { }

It is still OK to prefix a statement with calcTotal:, but that defines a label, not the name of the function. The function keyword, when it is used at the start of a statement (whether labeled or not), must be followed by its name.

You probably did not intend to define a label, but a function called calcTotal, and that should be written as follows:

function calcTotal(type) { }

or, you can also assign a function expression to a variable, like so:

var calcTotal = function(type) { }

Note that in other contexts your syntax could be correct. This would be when inside an object literal, defining an object property:

const myObj = {
    calcTotal: function(type) {
    }
}

This defines myObj.calcTotal as a function. Here calcTotal is not a label, but an object property name, and what follows it is not a function statement, but a function expression. See also var functionName = function() {} vs function functionName() {} for a comparison of these two concepts.

Upvotes: 0

Irvan Hilmi
Irvan Hilmi

Reputation: 551

Of course you're getting error, you should write

function calcTotal (type)

Or

calcTotal = function(type) // instead using double dot

Upvotes: 0

Related Questions