如您所知,ECMAscript会尝试变得聪明,如果您未明确编写 分号 ,则会自动插入 分号 。简单的例子
function foo() { var bar = 5 return bar }
仍将按预期工作。但是,如果您依靠这一点,则有一些警告。如果我们像这样重写该函数
function foo() { var bar = 5 return { bar: bar } }
..那个函数现在将返回,undefined因为解释器将在return语句之后插入分号(这就是为什么始终将大括号放在与语句相同的行上的原因)。
undefined
return
但是,了解了所有这些之后,我现在想知道在所有浏览器和版本中,如下所示的语句的 安全性 如何return
function foo() { var a = true, b = true, c = false; return a && b && c; }
我只是return statement在生产环境中写过类似的文章。仅仅因为我知道ECMAscript的“问题”而对分号插入不是那么聪明,我现在想知道,该代码是否100%有效。在我对FF / Chrome / IE(最新版本)的首次测试中,这似乎完全可以,但是真的吗?
return statement
如果除了该行中的语句以外, 自动分号插入 是否会“唤醒” return?任何人都可以提供有关实现的详细信息吗?
javascript解释器/编译器非常聪明,仅在之后有有效的Javascript时才插入自动分号。
您的代码可以正常工作,因为&&b它本身没有有效的表达式-这就是为什么在returna生成以下结果后不插入分号的原因:
&&b
returna
return a && b && c;
然而:
return (undefined);//implicitely inserted { .... }
完全有效,这就是为什么要插入分号的原因。