寻找有关回报价值行为的说明

时间:2017-10-21 01:30:45

标签: javascript algorithm

我不完全确定为什么

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]

我知道第一个例子更干净但我希望能够找出后者不起作用的原因。任何输入都是apreciated: - )

2 个答案:

答案 0 :(得分: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 :(得分:1)

你没有实际返回任何内容,因为你没有调用“return”。如果这样做,两行代码应该给你相同的结果。请注意,因为返回值看起来相同,但性质上并不完全相同。