题解 | #修改 this 指向#
function bindThis(f, oTarget) { // 修改 this 指向 //call、apply、bind的作用都是改变函数运行时的this指向 /* 首先,call apply bind三个方法都可以用来改变函数的this指向,具体区别如下: 1、fn.call (newThis,params) call函数的第一个参数是this的新指向,后面依次传入函数fn要用到的参数。会立即执行fn函数。 2、fn.apply (newThis,paramsArr) apply函数的第一个参数是this的新指向,第二个参数是fn要用到的参数数组,会立即执行fn函数。 3、fn.bind (newThis,params) bind函数的第一个参数是this的新指向,后面的参数可以直接传递,也可以按数组的形式传入。 不会立即执行fn函数,且只能改变一次fn函数的指向,后续再用bind更改无效。返回的是已经更改this指向的新fn*/ /* 第一种apply解法 return function(){ return f.apply(oTarget, arguments) }*/ /* 第二种call解法 return function(x, y){ return f.call(oTarget, x, y) }*/ /* 第三种bind解法 */ return f.bind(oTarget) }
为什么call、apply需要封装在一个函数里面进行返回,bind不需要?
网友理解:可能因为bind返回的是一个函数,而apply方法是立即执行函数,所以需要放在一个函数里面,到调用的时候再立即执行
#悬赏#