面试官:说说call、apply、bind是如何改变this的

💡 原文中文,约5500字,阅读约需13分钟。
📝

内容提要

本文介绍了JavaScript中this的显式绑定的三种方法:call、apply和bind,它们可以改变函数中this的指向。call和apply的区别在于参数的传递方式不同,bind则是创建一个新的函数并绑定this。文章还讨论了call、apply和bind在调用和结合new操作符时的影响。掌握这些基础知识对于理解JavaScript中的执行上下文、词法作用域和闭包非常重要。

🎯

关键要点

  • 本文介绍了JavaScript中this的显式绑定的三种方法:call、apply和bind。

  • call和apply的区别在于参数的传递方式,call接受多个参数,而apply接受一个参数数组。

  • bind创建一个新的函数并绑定this,返回的函数可以在后续调用时使用。

  • 掌握call、apply和bind对于理解JavaScript中的执行上下文、词法作用域和闭包非常重要。

  • call函数的实现步骤包括判断调用对象、设置上下文、调用函数并返回结果。

  • apply函数的实现步骤与call类似,但只接受两个参数,第二个参数为参数数组。

  • bind函数的实现步骤是绑定this和固定参数,返回一个新的待执行函数。

  • bind和call的主要区别在于call立即执行函数,而bind返回一个新的函数供后续执行。

  • 使用bind绑定的函数可以再次使用bind进行绑定,但之前的this值会被忽略。

  • 使用new操作符调用bind绑定的函数时,bind提供的this值会被忽略,参数会正常传递。

延伸问答

call、apply和bind的主要区别是什么?

call和apply的区别在于参数的传递方式,call接受多个参数,而apply接受一个参数数组;bind则是创建一个新的函数并绑定this。

如何使用call方法改变this的指向?

使用call方法时,第一个参数是要绑定的this值,后面的参数是传入函数执行的参数,调用时直接执行函数。

apply方法的参数传递方式是怎样的?

apply方法接受两个参数,第一个是this值,第二个是一个数组,数组中的元素作为参数传递给函数。

bind方法的返回值是什么?

bind方法返回一个新的函数,该函数绑定了this和固定参数,但不会立即执行。

使用new操作符调用bind绑定的函数会有什么影响?

使用new操作符调用bind绑定的函数时,bind提供的this值会被忽略,参数会正常传递执行。

call和bind在执行时有什么不同?

call在绑定this时立即执行函数,而bind则返回一个新的函数供后续执行,不会立即执行。

🏷️

标签

➡️

继续阅读