給定兩個實現相同確切邏輯的JS函數,第一個(test1)將始終返回undefined,而第二個(test2)將返回期望值。實現的區別是一個單一的return語句,vs將評估值存儲在局部變量中,然後返回它。當使用三元語句時,Javascript函數返回undefined
爲什麼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和邊緣的瀏覽器這種行爲,以及在節點JS –
爲什麼你會想到不同的行爲?它由Javascript語言指定。 – Barmar