在《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关键字单独写成一行,以免出现不必要的错误。
热门文章
原创教程
原教程:
附加练习:
原教程:
原教程:
附加练习:
有趣的工作场所
工作经验:
学习烦恼:
职场焦虑:
感到苦恼:
薪水:
培训背景:
培训费用:
培训简历:
有趣的俚语:
职业自由:
工作场所形象:
合作推广分割线
发表评论