Javascript の call と apply の動作

var p = {age: 23};
function hoge(arg){
console.log(arg + ' is ' + this.age + ' years old.');
}
hoge.call(p, 'Tom'); //Tom is 23 years old.

ここでは、

hoge.call(p, 'Tom');

のコードを日本語で表現すると、


「オブジェクトpをhogeのthisにセットして、引数を'Tom'として実行する。」

 

でいいのかな...


つまり、配列の中から最大の数値を取り出すコードである

var arr = [10, 3, 20, 9];
console.log(Math.max.apply(null, arr)); //20

は、

nullをMath.maxのthisとして、arrを引数として実行することになる。



Math.maxは、

Math.max(n1, n2, n3, ... , nx);

のように引数をとるが、

Math.max([n1, n2, n3, ... , nx]);

のようにはとれないため、applyの動作を利用して配列を複数の引数として渡している。