给定两个实现相同精确逻辑的JS函数,第一个(test1)将始终返回undefined,而第二个(test2)将返回预期值。实现差异是单个return语句,vs将已评估的值存储在局部变量中,然后将其返回。
为什么test1会返回未定义而不是预期的结果?其次,为什么将它存储在局部变量(test2)中才能使它工作?
以下是确切示例:
function test1(a,b)
{
return
a && a == 1 && b && b.match(/abc/i) ?
a + 1 :
0;
}
function test2(a,b)
{
var val =
a && a == 1 && b && b.match(/abc/i) ?
a + 1 :
0;
return val;
}
alert(test1(1,'abc')); // returns undefined when it should return 2
alert(test2(1,'abc')); // returns 2 as expected
这是一个JSFiddle:https://jsfiddle.net/8gmn004t/1/
答案 0 :(得分:4)
JavaScript在return
之后插入分号。你应该在它之后添加一个表达式,以便它可以继续。
您可以在此处阅读规则:What are the rules for JavaScript's automatic semicolon insertion (ASI)?
答案 1 :(得分:0)
在"返回"之后的第一种情况没有什么可以在同一条线上评估。在这种情况下,函数返回" undefined"。这就是这种语言的工作原理。
试试这个:
function test1(a,b)
{
return a && a == 1 && b && b.match(/abc/i) ?
a + 1 :
0;
}