bind()、apply() 和 call()

1. apply() 和call ()

这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内的 this 对象的值。

apply() 方法接收两个参数:一个是在其中运行的函数的作用域,另一个是参数数组。其中第二个参数可以是 Array 的实例,也可以是 arguments 对象。

bind()、apply() 和 call()_第1张图片

call() 方法和 apply() 方法的作用相同,它们的区别仅在于接收参数的方式不同。对于 call() 方法而言,第一个参数是 this 值没有变化,变化的是其余参数都直接传递给函数。换句话说,在使用 call() 方法时,传递给函数的参数必须逐个列举出来。

bind()、apply() 和 call()_第2张图片

它们真正强大的地方是能够扩充函数赖以运行的作用域。

2. bind()

bind() 是 ECMAScript5 中新增的方法,这个方法会创建一个函数的实例,其 this 值会被绑定到传给 bind() 函数的值。

bind()、apply() 和 call()_第3张图片

可以通过如下代码实现这种绑定

bind()、apply() 和 call()_第4张图片

bind() 方法不仅仅是将函数绑定至一个对象,它还附带一些其他应用:除了第一个实参之外,传入 bind() 的实参也会绑定至 this,这个附带的应用是一种常见的函数式编程技术,有时也被称为 “柯里化”。

bind()、apply() 和 call()_第5张图片

你可能感兴趣的:(bind()、apply() 和 call())