JavaScript中的this指向问题

2020-07-07  本文已影响0人  forever_提拉米苏

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,所以也就不能用作构造函数。

上一篇下一篇

猜你喜欢

热点阅读