小编典典

自动分号插入和返回语句

javascript

如您所知,ECMAscript会尝试变得聪明,如果您未明确编写 分号 ,则会自动插入 分号 。简单的例子

function foo() {
    var bar = 5

    return bar
}

仍将按预期工作。但是,如果您依靠这一点,则有一些警告。如果我们像这样重写该函数

function foo() {
    var bar = 5

    return
    {
        bar: bar
    }
}

..那个函数现在将返回,undefined因为解释器将在return语句之后插入分号(这就是为什么始终将大括号放在与语句相同的行上的原因)。

但是,了解了所有这些之后,我现在想知道在所有浏览器和版本中,如下所示的语句的 安全性 如何return

function foo() {
    var a = true,
        b = true,
        c = false;

    return a 
            && b
            && c;
}

我只是return statement在生产环境中写过类似的文章。仅仅因为我知道ECMAscript的“问题”而对分号插入不是那么聪明,我现在想知道,该代码是否100%有效。在我对FF
/ Chrome / IE(最新版本)的首次测试中,这似乎完全可以,但是真的吗?

如果除了该行中的语句以外, 自动分号插入 是否会“唤醒” return?任何人都可以提供有关实现的详细信息吗?


阅读 233

收藏
2020-05-01

共1个答案

小编典典

javascript解释器/编译器非常聪明,仅在之后有有效的Javascript时才插入自动分号。

您的代码可以正常工作,因为&&b它本身没有有效的表达式-这就是为什么在returna生成以下结果后不插入分号的原因:

return a && b && c;

然而:

return (undefined);//implicitely inserted
{
    ....
}

完全有效,这就是为什么要插入分号的原因。

2020-05-01