javascript: 为什么这个return语句会导致语法错误?

javascript: Why does this return statement cause a syntax error?

提问人:Mike 提问时间:10/2/2012 最后编辑:TedMike 更新时间:10/2/2012 访问量:896

问:

我正在使用 Apatana 3,我稍微修改了 JS 代码格式化程序以使其看起来更清晰,下面是格式化后的代码,它给了我一个错误:

    copyOffset : function( index )
    {
        return
        {
            x : index, y : index
        };
    }

Firebug给我:

SyntaxError: invalid label

如果我把它改成:

    copyOffset : function( index )
    {
        return{
            x : index, y : index
        };
    }

没事,有人能告诉我这两个 return 语句有什么区别吗?

javascript aptana3

评论


答:

7赞 raina77ow 10/2/2012 #1

不同之处在于,第一个片段实际上被解释为......

copyOffset : function( index )
{
    return;
    {
        x : index, y : index
    };
}

它被称为自动插入分号:当 JavaScript 解析器看到一个看似完整的语句,但缺少分号时,它会尝试“修复”它。

是的,尽管有时很有帮助,但它可能很烦人。本文详细介绍了此 JavaScript 功能。

评论

0赞 Mike 10/2/2012
感谢您的输入,我来自 java,我喜欢在开始块时换行,我想我必须回去更改我的格式。我认为JS有点出乎意料。
1赞 Christoph 10/2/2012 #2

哈哈,这是经典的;

Javasript 中断

return
{

因为它被视为一个新块并隐式插入分号:{

return;
{

从而返回 undefined:-D

问题是 Javasript 在语句有意义的行尾插入分号。由于可以独立存在,Javascript 将其解释为一个完整的语句并插入分号,从而破坏您的代码。return

实际上,这就是为什么在 Javascript 中你总是应该避免这些换行符并编写:

copyOffset : function( index ){
    return{
        x : index, y : index
    };
}