2016-05-18 15 views
2

JavaScriptに関する一般的な質問です。ほとんどの言語でJavaScript配列を関数に渡す

var some_array = []; 

function a_function(input, array){ 

    //do stuff to array 
    return array; 

} 

var some_array = []; 

some_array = a_function(input, some_array); 

console.log(some_array); 

作品、しかし、以下のようにうまく機能JSに:

var some_array = []; 

a_function(input, some_array); 

console.log(some_array); 

です私は、次のような、配列を変更する機能を持っている場合これは正解で、これはどのように機能していますか?

+3

配列はオブジェクトです。オブジェクトは参照渡しされます。 'some_array'と' array'は全く同じメモリ内配列です。 –

+0

どのようなエラーがありますか?これはJavaScriptで完全に有効な構文です。 – freakish

+0

ありがとうございました - 参照渡しはまさに私が知る必要があったものです:) – user1212520

答えて

4

JS内の配列はオブジェクトであり、値はその値が配列への参照である値によって関数に渡されます。つまり、関数の引数として渡された配列は、依然として外部配列と同じメモリを指しています。

これは、関数内の配列の内容を変更すると、関数の外から渡された配列が変更されることを意味します。

function f(arr) { 
 
    arr.push(1); 
 
    return arr; 
 
} 
 

 
var array = []; 
 

 
// both function calls bellow add an element to the same array and then return a reference to that array. 
 

 
// adds an element to the array and returns it. 
 
// It overrides the previous reference to the array with a 
 
// new reference to the same array. 
 
array = f(array); 
 
console.log(array); // [1] 
 

 
// adds an element to the array and ignores the returned reference. 
 
f(array); 
 
console.log(array); // [1, 1]

+1

ありがとう。私は円形オブジェクトに問題がありましたが、そこにエラーが見つかったと思います。私は物事を明確にするために、私の質問からその部分を削除しています。 – user1212520

+0

問題ないです。喜んで助けてください。編集した質問に対応するように回答を更新しました – nem035