带有“return”关键字的Curly括号

时间:2014-01-05 17:33:04

标签: javascript

var calculator = function ()
{
   function abc() { return (2+3); }

   return {
        addFun: abc
   }
}();


var calcu = function () {
    function abc() { return (3+4); }

    return 
    {
        addFun: abc
    }
}();


$(document).ready(function () {
    alert(calculator.addFun());
    **alert(calcu.addFun());**
});

计算器和计算功能有什么区别? calcu函数在执行时会出错。

差异只是花括号是“计算”中的下一行。如果我删除下一个并且使用“return”关键字放置花括号,那么工作正常。

请解释原因?

5 个答案:

答案 0 :(得分:5)

它被解析为:

return; // returns undefined
// a block:
{
    addFun: abc // syntax error!
};

因为自动分号插入。

将其更改为:

return {
     addFun: abc
};

答案 1 :(得分:5)

它被称为automatic semicolon insertion

  

遇到continuebreakreturnthrow令牌并且在下一个令牌之前遇到 LineTerminator 时,在continuebreakreturnthrow令牌后自动插入分号。

由于在return语句后面有换行符,系统会自动插入分号,将代码转换为:

return;
{
    addFun: abc
}

答案 2 :(得分:2)

返回是JavaScript中棘手的关键字。在第一个示例中,您将向计算器函数返回一个匿名对象,在第二个示例中,您不返回任何值。 JavaScript将解释第二个函数:

var calcu = function() { 
    function abc() ...

    return; // return undefined
    {
          addFun: abc
    }

请注意,半冒号在return关键字后被解释,因此calcu函数将不返回任何内容。

答案 3 :(得分:1)

return 
{
    addFun: abc
}

这是错误的,因为JavaScript会执行返回并将退出。 这应该是

return {
    addFun: abc
}

答案 4 :(得分:1)

看看jshint之类的linting工具,以避免这个和许多其他错误,这是它的输出:

enter image description here

这一部分会发生什么:

return 
{
    addFun: abc
}

被解释为两个语句,一个返回void(函数返回void immediatelly)加上一个包含未赋值给任何东西的addFun的对象表达式。