- 追加された行はこの色です。
- 削除された行はこの色です。
*JavaScript:callとapplyの違いとか [#x54b04a4]
JavaScriptの本を読んでいて今勉強してます。<br>あああ
callとapplyは、第一引数に関数を実行するコンテキストをとるのは同じだけど、実行する関数への引数の渡し方が違います。
-callは、call関数の引数として指定された2番目以降の引数がそのまま引き渡される
-applyは引数として1つの配列オブジェクトを指定し、その配列オブジェクトが展開されて引数として引き渡される
例を見た方がはやいですな。
以下の例では、引き渡された数字を足し込む関数を
-そのまま
-call経由
-apply経由
で呼び出します。
■例
function sum(){
var result = 0;
for (var n = 0; n < arguments.length; n++ ){
result += arguments[n];
}
this.result = result;
}
var scope1 = {};
var scope2 = {};
// グローバルスコープで実行
sum(1,2,3,4)
// scope1のスコープでapplyで実行
sum.apply(scope1,[5,6,7,8]);
// scope2のスコープでcallで実行
sum.call(scope2,9,10,11,12);
// それぞれ結果を確認
console.log(result);
console.log(scope1.result);
console.log(scope2.result);
結果は以下のとおり。
10
26
42