在下面的代码中,写了一个简单的例子,如果我们去执行vue的group方法,在forEarch里面,对变量进行push(),发现使用 app. 是可以的,使用 this. 就会报错,而group1方法用es6去定义函数,app. 和 this. 都可以执行,请问这是什么原因? this在vue的函数里面不是一直指向vue实例吗。es6定义的函数没有出现这样的问题。
2 回答

慕桂英3389331
TA贡献2036条经验 获得超8个赞
如果你用for
循环,而不用forEach
的话,这时候使用this
就是可以的,造成这个原因就是forEach
循环体是以一个函数体的形式去循环的,this
总是指向事件的调用者,这点你应该有所了解,知道了这一点,大概就知道是怎么回事了。

GCT1015
TA贡献1827条经验 获得超4个赞
接纳的答案回答不完全正确。
对于使用function定义的函数,它里面使用的this是由它的直接调用者决定(执行时)。如果没有直接的调用者,在非严格模式下,this指向window。
group()
里的forEach函数使用的是匿名函数作为回调函数,它是没有直接的调用者的,所有this为window。
箭头函数是没有自己的this,在它里面使用的this指向的是定义箭头函数时(注意:并非执行时)所处的宿主对象。
group1()
里定义的箭头函数宿主对象为vue实例,所以它里面使用的this为vue实例。
具体可以参考下:Vue实例里this的使用
添加回答
举报
0/150
提交
取消