返回

比较 JavaScript 中的 call、apply 和 bind 的区别

前端

在 JavaScript 中,callapplybind 方法都是用来改变函数的调用上下文(this 的值)的,但它们在语法、参数传递方式和返回值上存在一些差异。

语法

  • call() 方法:
function.call(thisArg, arg1, arg2, ..., argN)
  • apply() 方法:
function.apply(thisArg, [arg1, arg2, ..., argN])
  • bind() 方法:
function.bind(thisArg, arg1, arg2, ..., argN)

参数传递方式

  • call() 方法:除了第一个参数 thisArg 之外,其他参数都是直接跟在 thisArg 后面,用逗号分隔。
  • apply() 方法:除了第一个参数 thisArg 之外,其他参数必须放在一个数组中,然后作为第二个参数传入。
  • bind() 方法:除了第一个参数 thisArg 之外,其他参数都是直接跟在 thisArg 后面,用逗号分隔。

返回值

  • call() 方法和 apply() 方法都直接执行函数,并返回函数的返回值。
  • bind() 方法不执行函数,而是返回一个新的函数,这个新的函数的 this 值被绑定到了 thisArg,并且参数也已经被预先设置好了。

适用场景

  • call() 方法和 apply() 方法通常用于改变函数的调用上下文,以便在另一个对象上调用该函数。
  • bind() 方法通常用于创建新的函数,这些函数的 this 值被绑定到特定的值,并且参数也已经被预先设置好了。

总结

方法 语法 参数传递方式 返回值 适用场景
call() function.call(thisArg, arg1, arg2, ..., argN) 参数直接跟在 thisArg 后面,用逗号分隔 函数的返回值 改变函数的调用上下文
apply() function.apply(thisArg, [arg1, arg2, ..., argN]) 参数必须放在一个数组中,然后作为第二个参数传入 函数的返回值 改变函数的调用上下文
bind() function.bind(thisArg, arg1, arg2, ..., argN) 参数直接跟在 thisArg 后面,用逗号分隔 一个新的函数,this 值被绑定到了 thisArg,参数也已经被预先设置好了 创建新的函数,this 值被绑定到特定的值,参数也已经被预先设置好了

希望这篇比较 JavaScript 中的 callapplybind 的区别的文章对您有所帮助。如果您有任何其他问题,欢迎随时提出。