У вас есть новая строка после return
, поэтому в соответствии с правилами автоматической вставки точек с запятой (ASI), она рассматривается как имеющая ;
в конце , поэтому return
оператор заканчивается там .
Следовательно, согласно парсеру у вас есть следующий несвязанный код:
{
create: function(table, initialSortedColumn, customDataAccessors)
{
var sorter = Object.create(sorterPrototype);
sorter.init(table, initialSortedColumn, customDataAccessors);
return sorter;
}
};
Это интерпретируется как кодовый блок , начинающийся с {
в первой строке и заканчивающийся };
в последней строке. Внутри него есть метка , называемая create
и функция оператор без имени функции. Использование безымянных операторов недопустимо, поэтому вы и получаете ошибку.
В действительности, согласно правилам разбора JavaScript, следующий проблемный код:
function(/* parameters */) { /* body */ }
В действительности, ваша функция верхнего уровня всегда будет возвращать undefined
из-за ASI, а код после никогда не будет достигнут, но вы все равно получите ошибку при ее синтаксическом анализе.
Что вы хотите сделать, это следующее:
return {
create: function(table, initialSortedColumn, customDataAccessors)
{
var sorter = Object.create(sorterPrototype);
sorter.init(table, initialSortedColumn, customDataAccessors);
return sorter;
}
};
Таким образом, вы возвращаете объект со свойством create
и назначенной ему функцией.