2017-10-21 6 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(除去値)および修飾配列を返すことになる第1の結果を返す場合の唯一の違いは次のようになり。

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

あなたが呼び出されていないとして、あなたは実際には何も返さない "リターンを。"そうした場合、2行のコードで同じ結果が得られます。戻り値は同じように見えますが、正確には同一ではないので注意してください。