【发布时间】:2016-06-01 18:19:33
【问题描述】:
给定两个实现相同逻辑的 JS 函数,第一个 (test1) 将始终返回 undefined,而第二个 (test2) 将返回预期值。实现的区别在于单个返回语句,而不是将评估值存储在局部变量中然后返回。
为什么 test1 返回 undefined 而不是预期的结果?其次,为什么将其存储在局部变量(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/
【问题讨论】:
-
我已经在 Chrome 和 Edge 浏览器以及 Node JS 中确认了这种行为
-
为什么会有不同的行为?它由Javascript语言指定。
标签: javascript