2017-10-15 22 views
0

addSomething(myArray)を呼び出すたびに('nah man')を追加する代わりに、毎回同じ結果が得られるようにこの関数を書くにはどうすればいいですか?いつでも同じ結果が返されますか?

これはいわゆる不確実機能ですか?

これは副作用ですか?

function addSomething(array) { 
 
    array.push('nah man') 
 
} 
 

 
let myArray = [1, 2] 
 
addSomething(myArray) 
 
//=> [1, 2, 'nah man'] 
 
addSomething(myArray) 
 
//=> [1, 2, 'nah man', 'nah man']

+1

あなたは、元を変更せずに新しい配列を返すようにしたいわけ? – Ryan

+0

'array.concat( 'nah man')' – AbM

+0

アドバイスをいただきありがとうございますが、私は厳密に関数のように話しています。 array.push( 'nah man')をarray.concat( 'nah man')に置き換えることについては、関数内では説明していないと仮定します。 – CodeSamurai

答えて

0

配列は参照によって渡されていない関数の配列への変更がメインアレイに構成されているので、価値されているので、これが起こります。 スライスを使用して、この方法を必要な方法で実行します。

function addSomething(array) { 
array=array.slice(); 
array.push('nah man'); 
return array; 
}; 
let myArray = [1, 2]; 
addSomething(myArray); 
//=> [1, 2, 'nah man'] 
addSomething(myArray); 
//=> [1, 2, 'nah man'] 
+0

これだけです。ありがとう、たくさんの男。しかし、私がしたことがいわゆる純粋でない機能であったかどうか知っていますか? – CodeSamurai

+0

引数が配列なので – user7951676

0

私の簡単な例をチェックアウト

function addSomething(array) { 
 
    let b = array.slice(); 
 
    b.push('nah man'); 
 
    
 
    return b; 
 
} 
 

 
let myArray = [1, 2]; 
 
let newArray1 = addSomething(myArray); 
 
let newArray2 = addSomething(newArray1); 
 

 
console.log(myArray); 
 
console.log(newArray1); 
 
console.log(newArray2);

関連する問題