jtwang7 / JavaScript-Note

JavaScript学习笔记
10 stars 2 forks source link

JS - bind / call / apply 对比 #70

Open jtwang7 opened 2 years ago

jtwang7 commented 2 years ago

JS - bind / call / apply 对比

bind / call / apply 作用

本质是改变函数调用的this指向(即函数执行的上下文),形象理解就是将一个对象的内部方法借给另一个对象调用。因此,bind / call / apply 方法的作用对象必须是一个函数(某个对象的方法)。

区别

  1. callapply 区别在于参数: call() 从第二个参数开始,可以接收任意个参数。每个参数会映射到相应位置的 Function 的参数上。但是如果将所有的参数作为数组传入,它们会作为一个整体映射到 Function 对应的第一个参数上,之后参数都为空。 apply() 第二个参数,必须是数组或者类数组,它们会被转换成类数组,传入 Function 中,并且会被映射到 Function 对应的参数上。
  2. bindcall/apply 的区别在于执行时机: bind() 返回值是函数,并且需要稍后调用,才会执行。而 apply()call() 则是立即调用。bind() 参数同 call(),从第二个参数开始接收若干参数传入回调函数。