目录
call和apply是 JavaScript 中的两个函数方法,用于调用函数并指定函数内部的this值以及传递参数。它们的主要区别在于参数的传递方式。
function.call(thisArg, arg1, arg2, ...)
thisArg:在函数执行时所使用的this值。可以是任何对象。arg1, arg2, ...:要传递给函数的参数列表。call方法示例例如,假设有一个对象person和一个函数sayHello:
- var person = {
- name: 'Alice',
- sayHello: function() {
- console.log('Hello, ' + this.name);
- }
- };
-
- person.sayHello(); // 输出 "Hello, Alice"
使用call方法可以改变sayHello函数内部的this值:
- var person2 = {
- name: 'Bob'
- };
-
- person.sayHello.call(person2); // 输出 "Hello, Bob"
在上面的例子中,通过使用call方法,将person2作为sayHello函数的this值,从而实现了改变输出结果的效果。

function.apply(thisArg, [argsArray])
thisArg:在函数执行时所使用的this值。可以是任何对象。argsArray:作为参数传递给函数的数组。apply方法示例例如,假设有一个函数add,用于计算两个数的和:
- function add(a, b) {
- return a + b;
- }
使用apply方法可以通过数组传递参数:
- var numbers = [3, 5];
- var sum = add.apply(null, numbers);
- console.log(sum); // 输出 8
在上面的例子中,将numbers数组作为参数传递给add函数,通过apply方法实现了参数的传递。

call方法使用逗号分隔的参数列表,逐个传递给函数;apply方法接收一个包含参数的数组,将数组元素作为参数传递给函数;