关于this指向的问题,之前都是只记住,普通函数谁调用,就指向谁,而箭头函数定义在哪个作用域下,this就指向谁。
但是似乎这样理解有点浅显。
所以我就傻乎乎的,只记住这一点就去面试了,所以面试官出了这道题,我就GG了。
var o = {
v:'hello',
p:['a1','a2'],
f:function f(){
this.p.forEach(function(item){
console.log(this.v+' '+item);
console.log('f中的this为:'+this)
} )
}
}
o.f()
我的回答是:
hello a1
hello a2
但是实际上是:
undefined a1
undefined a2
我之前的理解是,o.f(),那就是对象o进行调用,那么函数f中的this就是指向o,所以我继续猜想,如果函数里面再定义函数,那么这个内部函数的this也可能是指向这个对象o,所以导致出错。
所以我发布了这个问答:https://segmentfault.com/q/10...
然后解决了我这个疑惑。所以this指向其实记住以下原则就可以了。
(1)普通函数this指向是不能确定的,谁调用,this指向谁;至于没有谁调用的,那么在严格模式下,this就默认指向undefined;在非严格模式下就默认指向全局对象;
(2)箭头函数,在哪个地方定义,它就指向哪个对象;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。