请教一个箭头函数的问题

        let name = 'window';

        let obj = {
            name: '1',
            sayName1: function (fn) {
                console.log(this); // obj
                fn();
            },
        }

        obj.sayName1(() => {
            console.log(this); // window
            console.log(this.name); // window
        })

请问箭头函数的 this 为什么指向 window 而不是 obj?

阅读 2k
3 个回答

        obj.sayName1(() => {
            console.log(this); // window
            console.log(this.name); // window
        })

等同于

        // 叫noname只是想表示内部实现了一个匿名函数,但是匿名函数相当于是丢在全局下的。
        noname = () => {
            console.log(this); // window
            console.log(this.name); // window
        }
        obj.sayName1(noname())

箭头函数没有自己的this,它会捕获自己在定义时(注意,是定义时,不是调用时)所处的外层执行环境的this,并继承这个this值。所以,箭头函数中this的指向在它被定义的时候就已经确定了,之后永远不会改变。
给出的代码中,箭头函数中的this实际是继承的它定义时所处的全局执行环境中的this,所以指向Window对象,所以输出'window'。

推荐问题