2017-10-23 7 views
1
var a=[1,2,3]; 
var b = a; 
a[1]=4; 
alert(a); 
alert(b); 

なぜ配列Bも[1,4,3]であるとわかりません。JavaScriptの基本的な配列と関数の問題

私の2番目の質問は、関数sum(a)(b)をどのようにして完成させることができるかということです。つまり、a + bの値を返します。例えば、sum sum(2)(4)なら6を返します。

答えて

6

Bが変異した理由は、 var b = aを割り当てると、配列をコピーしていないことになります。 javascriptでは、配列はオブジェクトであり、オブジェクトデータを保持する変数は単にオブジェクトへの参照に過ぎません。 a[1] = 4行はオブジェクトを変更し、abの両方を参照しています。

2番目の質問では、sumのカレーバージョンが必要です。 const sum = a => (b => a + b); のように単純に実装できます。sum(a)は、関数b => a + bです。

0

JS var Arr1 = Arr1では、それをコピーせずに単に配列への参照を別の変数に置きます。あなたは2つの異なる配列、クローン開始位置でそれをスライスして最初のものを持ってしようとしている場合

@Adam Jaffeの答えを参照してください)。

var a=[1,2,3]; 
 
var b = a.slice(0); 
 
a[1]=4; 
 
console.log(a); 
 
console.log(b);

0

var a =[1,2,3]; 
 
var b = []; 
 
b = a.concat(b); 
 
a[1]=4; 
 
alert(a); 
 
alert(b); 
 

 
function sum(a, b){ 
 
\t return a + b; 
 
} 
 

 
var r = sum(2, 4); 
 
console.log(r);

-1
function sum(a,b) 
{ 
    return a+b; 
} 

var a=[1,2,3]; 
var b = a.slice(0); 
a[1]=4; 
alert(a); 
alert(b); 

var c=sum(2,4); 

alert("c=" + c); 
+0

著者は、彼がこのよう呼び出すことができる機能を求めて: '合計(A)(B)'ではなく '和( a、b) '。 – Mateusz