1、在全局作用域下, this指向的是window对象
2、在普通函数作用域下
在非严格模式下,this的指向依旧是window对象
在严格模式下,this的指向是undefined
3、构造函数调用, this 指向是实例对象
4、对象方法调用,this 指向该方法所属的对象
5、通过事件绑定的方法, this 指向绑定事件的对象
6、在定时器函数下, this 指向 window
7、更改this指向的三个方法
我们知道在普通函数里this指向window,下面提供三种方法改变this的指向,分别为:call()、apply()、bind()
差别:
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象。
call和bind 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔。apply 的所有参数都必须放在一个数组里面传进去。
bind 返回的是一个新的函数,你必须调用它才会被执行,所以多了一个括号。
8、改变this指向的第四种方法
除了上面所说的三种方法外,还有一种方法可以使this的指向变得不一样,那就是箭头函数。
x => x*x
箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。如下面的例子:
普通函数与箭头函数我们可以看出在箭头函数fn中this的指向与变量b的指向相同,我们可以理解为箭头函数中的this继承的是父执行上下文里面的this,也就是说跟父级中的this指向相同。
所以,箭头函数中this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。
网友评论