Javascipt的call和apply的区别 ?
参考答案:
JavaScript中的call
和apply
方法都用于调用函数,并允许你明确地设置函数执行时的this
值。然而,它们的主要区别在于如何接受函数参数。
- 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'
和'!'
作为参数传递给函数。
- 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()
时,如果函数不需要额外的参数,可以传入null
或undefined
作为第一个参数,以明确设置this
的值。 - 当你需要在函数调用之前设置
this
的值,并且传递参数时,这两个方法非常有用。例如,你可以使用它们来调用具有特定上下文的函数,或者在不改变函数本身的情况下,改变函数的行为。