我正在粘贴mozilla docs的片段。
箭头函数不会创建自己的this,使用封闭执行上下文的this值。因此,在下面的代码中,传递给setInterval的函数中的this与封闭函数中的值相同:
function Person(){
this.age = 0;
setInterval(() => {
this.age++; // |this| properly refers to the person object
}, 1000);
}
var p = new Person();
我的困惑是,当执行上面的代码时,setInterval函数将被其实现替换,匿名函数作为参数传递,如下所示。
setinterval(){
-------some code for repeating the function passed as argument
the function itself
() => {
this.age++; //line 00
}
-----
some code
}
第00行:这里不会指向匿名函数,因为使用了箭头函数,它将指向封闭的执行上下文。我所理解的封闭执行上下文是setInterval函数,但是没有定义age属性。我知道我错了,因为年龄指向人物,因为它运行良好。
答案 0 :(得分:4)
创建功能的位置,而不是名称的位置,即enclosing context
。您的函数是在function Person
中创建的,因此此函数是arrow function
的封闭上下文。
您只需创建arrow function
并将其传递给setInterval
,但不会在setInterval
的定义中创建。这个
function Person(){
this.age = 0;
setInterval(() => {
this.age++;
}, 1000);
}
相当于此。在这里,您可以看到func
的封闭上下文是Person
。
function Person(){
this.age = 0;
var func = () => {
this.age++;
};
setInterval(func, 1000);
}