返回
比较 JavaScript 中的 call、apply 和 bind 的区别
前端
2023-12-24 13:48:41
在 JavaScript 中,call
、apply
和 bind
方法都是用来改变函数的调用上下文(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 中的 call
、apply
和 bind
的区别的文章对您有所帮助。如果您有任何其他问题,欢迎随时提出。