Javascriptで配列を引数として関数やメソッドに渡す場合、
思わぬ挙動をすることがあるので注意が必要です。
わかりやすい例を示すと、例えばArrayオブジェクトのpushメソッドに対して配列を引数にして渡すとき
var list = [];
var innerList = ['foo', 'bar', 'baz']
list.push(innerList);
console.log(list); // output: [['foo','bar','baz']]
といった結果になってしまいます。つまり、上記のように配列にしてまとめて渡す時と、
list.push('foo', 'bar', 'baz');
のように引数ごとに分けて渡す場合では振る舞いが違うということです。
でも、上記のようにわざわざ配列の中身を分解して引数に渡すのは面倒なので、
そんなときはapplyメソッドを使うと便利です。
Array.prototype.push.apply(list, innerList);
これで、listを親オブジェクトとしつつ、innerListの配列要素を分解した形で処理してくれます。