相信看到这篇文章的小伙伴在学习前端的过程中遇到了this指向的难题
首先我们先看以下两幅图

大家想一下23,24,25行打印的是什么呢

第33行打印的又是什么呢
答案是:

33行打印的是‘小新’
比较一下这两者 this 的差别,第一张图的19行打印里面的 this 指向 obj,其他指向的是window,第二张图全局声明的fn() 函数 this也 是 window ;小伙伴门有没有答对呢,每答对的先去学习this指向问题哦
好了,言归正传!!
1,call()、apply()、bind() 都是用来重定义 this 这个对象的!
例:


既然说call()、apply()、bind() 都是来重新定义this的那么他们的区别在哪里呢
就从以上打印出来的结论来看除了bind方法后面多了一个()外,返回的结果都一致
由此得出结论,bind 返回的是一个新的函数,你必须调用它才会被执行。
apply() 与call()作用完全一样,只是接受参数的方式不太一样。例如,有一个函数定义如下:
var fn = function(arg1,arg2) {
};
fn.call(this, arg1, arg2);
fn.apply(this, [arg1, arg2])
其中 this 可以是任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。
由此可见:apply 、 call 、bind
都是用来改变函数的this对象的指向的;
第一个参数都是this要指向的对象,也就是想指定的上下文;
三者都可以利用后续参数传参;
其中 bind 是返回对应函数,只是改变指向而不执行函数;apply 、call 则是立即调用 。