为什么我没有在js中的以下两个函数中获得相同的输出。
foo1 (){
return {
bar:"hello"
};
}
foo2 (){
return
{
bar:"hello"
};
}
console.log("foo1 returns:");
console.log(foo1());
console.log("foo2 returns:");
console.log(foo2());
答案 0 :(得分:2)
原因是JS中的可选分号。
JS会像这样对待你的代码:
foo2 () {
return ;
{
bar:"hello"
};
}
JS中的许多分号都是可选的。有时这是一个优势(例如,参见代码高尔夫)。但在像你这样的其他场合,这会导致意外错误。
在foo1()
中,您在返回后有一个空缺{
,因此解析器将首先尝试查找相应的结束}
。但是,在foo2()
中,解析器没有理由猜测应该有更多要解析的内容,所以它只是插入(可选的)分号并按原样运行代码。下一行中的对象是完全(语法上)有效的代码 - 没有理由隐式更改它的任何内容。
答案 1 :(得分:1)
检查一下,
function foo1() {
return {
bar: "hello"
};
}
function foo2() {
return {
bar: "hello"
};
}
console.log("foo1 returns:");
console.log(foo1());
console.log("foo2 returns:");
console.log(foo2());
工作?
如果是功能,请告诉它它是一个功能。