在《JavaScript语言精粹》这本书里,这个“自动插入分号”机制被划入到了JavaScript的毒瘤里面,与之并列的前面的全局变量。 有些时候,不合时宜地插入分号,会导致严重的后果。 比如一个return语句要正确返回一个值,这个值的表达式的开始部分(就算是一个括号也好)必须和return位于同一行。
function foo1(){
return {
bar: "hello"
};
} function foo2(){
return
{
bar: "hello"
};
}
出人意料的是,这两个函数返回的内容并不相同。更确切地说是:
这不仅是令人惊讶,而且特别让人困惑的是, foo2()返回的是undefined,也没有任何错误抛出。
原因是这样的,当碰到 foo2()中包含return语句的代码行(代码行上没有其他任何代码),分号会立即自动插入到返回语句之后。请仔细留意上面两个函数中return的不同之处,foo2函数的return是单独一行的。也不会抛出错误,因为代码的其余部分是完全有效的。其实这时候foo2就相当于:
所以,在使用return语句的时候,要留意javascript的这个特点,尽可能不要将return关键字写在独立的一行,避免不必造成不必要的错误。