2017-10-21 55 views
-2

我不完全知道为什么寻找澄清返回值行为

function slasher(arr, howMany) { 
var A = arr.splice(0, howMany); 

} 

slasher([1, 2, 3], 2); 

返回[1,2]

而...

function slasher(arr, howMany) { 
arr.splice(0, howMany); 

} 

slasher([1, 2, 3], 2); 

返回[3]

我知道第一个例子更清洁,但我希望能够确定为什么后者不起作用。任何输入都是合适的:-)

回答

4

您的示例都没有返回值,因为它们都没有return语句。

如果添加return语句,那么这两个函数的表现仍然相同。

function slasher1(arr, howMany) { 
 
var A = arr.splice(0, howMany); 
 
} 
 

 
console.log(slasher1([1,2,3], 2)); 
 

 
function slasher2(arr, howMany) { 
 
arr.splice(0, howMany); 
 
} 
 

 
console.log(slasher2([1,2,3], 2)); 
 

 
function slasherWithReturn1(arr, howMany) { 
 
var A = arr.splice(0, howMany); 
 
return A; 
 
} 
 

 
console.log(slasherWithReturn1([1,2,3], 2)); 
 

 
function slasherWithReturn2(arr, howMany) { 
 
return arr.splice(0, howMany); 
 
} 
 

 
console.log(slasherWithReturn2([1,2,3], 2));

唯一的区别是,如果第一个例子将返回的Array.slice(被去除的值),第二个将返回修改后的数组的结果(所述阵列不去除的值) 。

function slasher1(arr, howMany) { 
 
    return arr.splice(0, howMany); 
 
} 
 

 
console.log(slasher1([1,2,3], 2)); 
 

 
function slasher2(arr, howMany) { 
 
arr.splice(0, howMany); 
 
return arr; 
 
} 
 

 
console.log(slasher2([1,2,3], 2));

1

你,你有没有援引实际上并不返回任何东西 “的回报。”如果你这样做,这两行代码应该给你相同的结果。请注意,因为返回值看起来相同,但本质上并不完全相同。