1.浏览器里,在全局范围内的this 指向window对象;
2.在函数中,this永远指向最后调用他的那个对象;
3.构造函数中,this指向new出来的那个新的对象;
4.Call、apply、bind中的this被强绑定在指定的那个对象上;
5.箭头函数中this比较特殊,箭头函数this为父作用域的this,不是调用时的this.要知道前四种方式,都是调用时确定,也就是动态的,而箭头函数的this指向是静态的,声明的时候就确定了下来;
6.apply、call、bind都是js给函数内置的一些API,调用他们可以为函数指定this的执行,同时也可以传参。
三者的共同点:
都是改变this指向的
区别:
call()和apply()
共同点:
将this指向第一个参数。
apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向);
不同点:
在于第二个参数,call第二个参数是一个一个的数据,apply第二个参数是数组。
bind()
也是改变函数体内this的指向,需要加()才能执行;
bind与apply、call最大的区别就是:bind不会立即调用,其他两个会立即调用
三个的使用区别:
都是用来改变函数的this对象的指向的;
第一个参数都是this要指向的对象;
都可以利用后续参数传参;
bind是返回对应函数,便于稍后调用,apply、call是立即调用;
总结:
1、call、apply修改this指向,同时执行函数
,二者只不过是传参方式不同。fn.call(修改后的this所代表的值,参数1,参数2,...)
、fn.apply(修改后的this所代表的值,[参数1,参数2,参数3,...])
call将函数的参数按照 ,
分割,apply将参数放在数组
中
2、bind,修改this指向,不立即执行函数,只是返回修改this指向后的函数
,函数的参数也是用,
分割。