JavaScript中call和apply的区别
本文由 小茗同学 发表于 2016-09-23 浏览(3079)
最后修改 2018-04-27 标签:javascript call apply 区别

区别

二者的作用都是在指定this值和参数的情况下调用某个函数,它们 唯一区别 就是参数指定的形式不一样,call接收的是参数列表,apply接收的是数组。

语法:

fn.call(thisArg[, arg1[, arg2[, ...]]]);
fn.apply(thisArg[, argsArray]);

callapply老是分不清,如何记忆呢?可以这样记:applycall单词长,参数也更长:

fn.call(this, a, b);
fn.apply(this, [a, b]);

使用

var obj =
{
	str: 'abc',
	foo: function(a, b){ console.log(this.str, a, b); }
};
var fn = obj.foo;
obj.foo(1, 2); // 输出abc 1 2
fn(1, 2); //  // 输出undefined 1 2,由于是直接执行,this变成了window,所以this.str变成了undefined
fn.call(obj, 1, 2); // 输出abc 1 2
fn.apply(obj, [1, 2]); // 输出abc 1 2