(JavaScript)call()和apply()的区别

68 阅读1分钟

call()apply() 都是 JavaScript 中用于调用函数的方法,它们的主要区别在于参数传递的方式。

  1. call() 方法:
  • call() 方法允许你调用一个函数,同时明确指定函数的上下文(即 this 的值),并传递一个参数列表。
  • 参数传递是以逗号分隔的参数列表的方式进行的,每个参数都是独立列出的。
  • 例如:
function greet(name) {
  console.log(`Hello, ${name}! My name is ${this.name}.`);
}

const person = { name: "John" };
greet.call(person, "Alice");// 输出:Hello, Alice! My name is John.
  1. apply() 方法:
  • apply() 方法与 call() 类似,允许你调用一个函数,并指定函数的上下文,但参数传递是以数组的形式进行的。
  • 这意味着你可以将参数作为一个数组传递给函数。
  • 例如:
function greet(name) {
  console.log(`Hello, ${name}! My name is ${this.name}.`);
}

const person = { name: "John" };
greet.apply(person, ["Alice"]);// 输出:Hello, Alice! My name is John.

总结:

  • 两者的第一个参数都指定了函数体内 this 对象的指向
  • 主要区别在于参数传递方式:call() 使用逗号分隔的参数列表,而 apply() 使用参数数组。
  • 在某些情况下,apply() 可以更灵活,特别是当你需要动态地构建参数数组时。
  • 通常情况下,你可以根据你的需求选择使用 call()apply() 中的一个来调用函数。