了解普通和匿名箭头功能之间的“此”上下文

时间:2018-09-19 15:50:00

标签: javascript

最后我真的试图理解词汇范围,我编写了这段代码。

在normalFunction中,其作用域是其内部,第一个this.a是提升后的aaa?

在anonymousFunction中,它的作用域是词法,即从中创建函数的范围(全局/窗口对象)。如果未声明this.z,那么第一个this.z控制台日志将是未定义的,因为这里没有吊装?

this.a = 'outer';
this.z = 'outer';

function normalFunction() {
    console.log('first: ', this.a); // first: aaa
    return function y() {
        this.a = 'aa';
        console.log(this.a); // aa
        return function z() {
            this.a = 'aaa';
            console.log(this.a); // aaa
        }
    }
}

const anonymousFunction = () => {
    console.log('first: ', this.z); // first: outer
    return () => {
        this.z = 'zz';
        console.log(this.z); // zz
        return () => {
            this.z = 'zzz';
            console.log(this.z); // zzz
        }
    }
}

normalFunction(1)(2)(3);
anonymousFunction(1)(2)(3);

0 个答案:

没有答案