javascript - 自动分号插入和返回语句

标签 javascript specifications ecmascript-5 automatic-semicolon-insertion

<分区>

您可能知道,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语句。仅仅因为我知道 ECMAscript 在分号插入方面不太聪明的“问题”,我现在想知道该代码是否 100% 有效。在我对 FF/Chrome/IE(最新版本)的第一次测试中,这似乎完全没问题,但真的如此吗?

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

最佳答案

javascript 解释器/编译器非常智能,只有在之后存在有效的 Javascript 时才会自动插入分号。

您的代码有效,因为 && b 目前是无效的表达式 - 这就是为什么在 return a 之后没有插入分号导致:

return a && b && c;

但是:

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

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

为了完整起见,引用规范:automatic semicolon insertion .这些示例值得通读。

关于javascript - 自动分号插入和返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12745743/

相关文章:

javascript - 如何显示 Bootstrap 箱关闭前的剩余秒数?

javascript - Flickr API 始终返回相同的数据

javascript - 如何将元素插入数组而不重复它们?

php - 为什么 rpmbuild 在规范文件中不包含手动 'Requires' 指令?

c++ - 将寄存器设计成可由 C 和 C++ 访问的外围设备的最佳实践?

javascript - 暂停按钮功能在轮播中不起作用

angular - 为什么 TypeScript 在实现时允许重复组件?

javascript - jQuery $.map 的 Angular 等效项?

javascript - argument.slice() 应该在 ES5 中工作吗?

html - HTML "Living Standard"以后会变成 "Working Draft"吗?