奇怪的javascript语法错误

Ism*_*ael 5 javascript angularjs

在Firefox中我收到了一个奇怪的语法错误,因为这不是微不足道的,而且我想在这里发布一个有趣的语法错误,因为我不知道它正在发生.

应该将此文件作为错误报告提交?

我在这里测试一些脚本:这里

它给了我一个语法错误.SyntaxError: invalid label at line 5.

app.directive("alertable", function()
{
    return 
    {
        restrict : "A",
        link: function(scope, element, attrs) 
        {
            element.bind("click", function() 
            {
                alert(attrs.message);
            });
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

而这一个,不要:

app.directive("alertable", function()
{
    return { // fix???
        restrict : "A",
        link: function(scope, element, attrs) 
        {
            element.bind("click", function() 
            {
                alert(attrs.message);
            });
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 11

此行为是设计使然.

Javascript中的分号是可选的.(ASI)
解析器return在行之后插入一个隐式分号,并假定它{开始一个代码块.(比如之后iffor)

该代码块中的第一行实际上不是有效代码,因此您会收到该错误.

发生这种情况是因为return有和没有操作数的有效语句.

同样,代码

return
4;
Run Code Online (Sandbox Code Playgroud)

被解析为return; 4;.

  • 感谢您的启发,我从未听说过"ASI".很高兴知道.现在我将编码更好. (2认同)