>[danger]介绍一下 Js 中bind(),call()和apply()的区别 JavaScript 中的 bind()、call() 和 apply() 方法都**可以用来改变函数内部的 this 指向**。 它们有一些重要的区别: - 三种方法最大的区别在于**参数传入方式不同**:bind() 方法接受一系列参数列表,而 call() 和 apply() 方法则分别接受一组参数和一个参数列表。具体而言,bind() 将参数作为一个个单独的值传入,而 call() 和 apply() 都允许传递一个数组作为参数。 - **执行时间不同**:bind() 绑定后返回一个新函数,并不会立即执行,需要调用该函数才会执行;而 call() 和 apply() 则会立即执行函数。 - **返回值不同**:bind() 方法返回一个绑定后的新函数,而 call() 和 apply() 则直接执行原始函数并返回执行结果。 它们的作用分别如下: - **bind() 方法**:bind() 可以指定函数内部的 this 指向,并将其绑定到一个新函数上进行返回。该函数并不会立即执行,而是等待调用。bind() 也可以用来实现柯里化(currying) - **call() 方法**:call() 可以在指定的 this 值和若干个参数(参数的列表)的前提下调用某个函数或方法。注意,call() 方法需要将参数逐个传递进去,而不能像 apply() 方法一样将所有参数打包成一个数组。 - **apply() 方法**:apply() 和 call() 的作用非常类似,都是改变函数内部的 this 指向。区别在于,apply() 方法需要将参数打包成一个数组传递进去,而 call() 则是将参数逐个传递。