Skip to content

this #8

@homobulla

Description

@homobulla

这y一part主要的分析箭头函数下的this问题。
在箭头函数下,this是在定义时也就是函数申明时被确定的,它继承了其父的执行期上下文。

var a = 11;
var obj = {
    a: '22',
    printOne: ()=>{
        console.log(this.a);
        console.log(a)
    },
    printTwo: function(){
        console.log(this.a);
        console.log(a)
    }
}
obj.printOne();
obj.printTwo();

首先我们定义一个对象obj,对象里有两个方法:printOneprintTwo,其中printOne是箭头函数.
箭头函数本身与printOne平级以key:value的形式,也就是箭头函数本身所在的对象为obj.其父级就是window.换句话说,printOne在定义时,其scope中存的执行期上下文是GO
console.log(this.a);中的this.a 就是GO中定义的a变量。
console.log(a)中的a,printOne函数在执行前的一刻,形成自己的AO,AO内并没有变量a,所以顺着执行期上下文的链往下找,直到找到了GO中定义的a
而在printTwo中,this则是谁调用则指向谁,当obj调用printTwo调用printTwo时,函数内的this就指向了obj对象,于是输出obj内部的this.

下一part将call 和apply 以及bind中的this,同时自己实现bind函数。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions