ecmascript5 教程-经典面试题(五):小心javascript手动插入分号

在《JavaScript语言精髓》一书中,这种“自动分号插入”机制被归类为JavaScript的毒瘤,下面的全局变量与之并列。

有时,在不合适的时间插入分号可能会产生严重的后果。 例如,如果一个return语句想要正确返回一个值,则该值的表达式的开头部分必须与return位于同一行。

今天我们就来说说这个知识点,看看下面的代码函数ecmascript5 教程,它们会返回什么?

<pre class="brush: javascript; gutter: false; first-line: 1 hljs php" style="margin: 15px 13px;padding: 10px 15px;overflow-x: auto;color: rgb(51, 51, 51);background-color: rgb(226, 226, 226);word-break: break-all;word-wrap: break-word;white-space: pre-wrap;font-variant-numeric: normal;font-variant-east-asian: normal;font-stretch: normal;font-size: 12px;line-height: 20px;">function foo1(){
return {
bar: "hello"
};
}

function foo2(){
return
{
bar: "hello"
};
}

令人惊讶的是,这两个函数没有返回相同的内容。 更确切地说:

console.log("foo1 returns:");
console.log(foo1());
console.log("foo2 returns:");
console.log(foo2());

将形成:

foo1 returns:
Object {bar: "hello"}
foo2 returns:
undefined

除了令人惊奇和非常令人困惑之外,foo2() 返回未定义并且不会抛出任何错误。

原因是这样的,当 foo2() 中遇到包含 return 语句的代码行(该代码行上没有其他代码)时,会在 return 语句后面立即手动插入分号。 请注意里面两个函数的return的区别,foo2函数的return是在一行。

也不会抛出错误ecmascript5 教程,因为代码的其余部分是完全有效的,即使它没有被调用或执行任何操作(相当于它是一个未使用的代码块,它定义了字符串“hello”属性的等效项酒吧)。

因此,在使用return语句时,要注意javascript的这一特性,尽量不要将return关键字单独写成一行,以免出现不必要的错误。

热门文章

原创教程

原教程:

附加练习:

原教程:

原教程:

附加练习:

有趣的工作场所

工作经验:

学习烦恼:

职场焦虑:

感到苦恼:

薪水:

培训背景:

培训费用:

培训简历:

有趣的俚语:

职业自由:

工作场所形象:

合作推广分割线