1

也许这个问题没有太大的建设性,但似乎我可以弄清楚为什么会出现这个语法错误:

 var operations = function () {
            function computeTotalPrice(elem) {
                var totalpriceafter = 0;
                 $(".totalForProductNotDeleted").each(function () {
                    var pp = parseFloat($(this).html().toString().replace(",", "."));
                    totalpriceafter += pp;
                });
                return totalpriceafter;
            };
           function HightLightChangedPrices(elem) {
                elem.parent().parent().parent().find(".totalForProduct").effect("highlight");
                $("#totalPrice").effect("highlight");
            };
            return
            {
                computeTotalPrice : computeTotalPrice,
                HightLightChangedPrices : HightLightChangedPrices / I get expected ; 
            };

        };
4

1 回答 1

6

return必须跟在同一行上的值。

        return
        {
            computeTotalPrice : computeTotalPrice,
            HightLightChangedPrices : HightLightChangedPrices 
        };

应该

        return {
            computeTotalPrice : computeTotalPrice,
            HightLightChangedPrices : HightLightChangedPrices 
        };

问题在于“限制生产”。 http://es5.github.io/#x5.1.6

如果短语“[no LineTerminator here]”出现在句法语法产生式的右侧,则表明该产生式是受限产生式:如果 LineTerminator 出现在输入流的指示的位置。例如,生产:

ReturnStatement :
    return [此处没有 LineTerminator] 表达式opt ;

JavaScript 解析器会看到您的代码并解析第一行、areturn和行终止符,因此它会插入一个分号,然后继续执行下一行。然后它看到 a{并将其解释为语句块的开头,因为顶级表达式语句不能以 a 开头{

ExpressionStatement :
    [lookahead ∉ { {, function}] 表达式 ;

街区内,

 computeTotalPrice : computeTotalPrice, HightLightChangedPrices

是一个有效的标记语句,但一个语句不能有效地跟在 a 后面,:这就是它在那里要求分号的原因。

于 2013-05-20T14:57:49.930 回答