跳到主要内容

Javascipt的call和apply的区别 ?

参考答案:

JavaScript中的callapply方法都用于调用函数,并允许你明确地设置函数执行时的this值。然而,它们的主要区别在于如何接受函数参数。

  1. call() 方法

call()方法接受一个参数列表,第一个参数是函数执行时的this值,其余参数则直接传递给函数。

function greet(greeting, punctuation) {
  console.log(greeting + ', ' + this.name + punctuation);
}

let person = {name: 'John'};

greet.call(person, 'Hello', '!');  // 输出: "Hello, John!"

在这个例子中,greet函数被调用,this值被设置为person对象,'Hello''!'作为参数传递给函数。

  1. apply() 方法

apply()方法也接受两个参数,第一个参数是函数执行时的this值,第二个参数是一个数组或类数组对象,其中的数组元素将作为单独的参数传给函数。

function greet(greeting, punctuation) {
  console.log(greeting + ', ' + this.name + punctuation);
}

let person = {name: 'John'};

greet.apply(person, ['Hello', '!']);  // 输出: "Hello, John!"

在这个例子中,greet函数被调用,this值被设置为person对象,参数['Hello', '!']是一个数组,它的元素被作为单独的参数传递给函数。

总结

  • call()apply()的主要区别在于参数传递方式。call()直接接收参数列表,而apply()接收一个参数数组。
  • 在使用call()apply()时,如果函数不需要额外的参数,可以传入nullundefined作为第一个参数,以明确设置this的值。
  • 当你需要在函数调用之前设置this的值,并且传递参数时,这两个方法非常有用。例如,你可以使用它们来调用具有特定上下文的函数,或者在不改变函数本身的情况下,改变函数的行为。