1

关于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)箭头函数,在哪个地方定义,它就指向哪个对象;


hmy666
242 声望8 粉丝

Ta像是以前学生时代班上常有的学生,成绩中上游,偶尔拔得头筹,但大部分时候安安静静地坐着,Ta有自己的兴趣爱好,但多数都不能使Ta出类拔萃,Ta不是天生光芒万丈的学霸学神,但所有人都不会遗忘Ta。