call()
和 apply()
方法在功能上是类似的,它们都用于调用函数并指定函数执行时的上下文(即 this
的值),但它们的参数传递方式略有不同:
-
call()
方法:接受一个参数列表,第一个参数是要绑定给函数的this
值,后续的参数则会作为调用函数的参数传入。 -
apply()
方法:接受两个参数,第一个参数是要绑定给函数的this
值,第二个参数是一个数组或类数组对象,其中的元素会被作为调用函数的参数传入。
在 call()
方法内部,传递的参数会被视为函数的参数列表,而在 apply()
方法内部,传递的第二个参数会被视为数组的元素,在调用函数时会将其展开。
所以你可以理解为,call()
方法内部也会将传递的参数作为数组的元素进行操作,只不过这些参数直接作为参数列表传入函数,而不是通过数组展开。