一、了解this

关于this,我们需要了解两点

  • this永远指向一个对象
  • this的指向完全取决于当前执行环境(即该函数被调用的位置)

//在一些文档中曾看到过js中this指向被分为n中情况,我个人感觉这是在将简单问题复杂化,解决问题的本质是将问题模型化,简单化,而不是引入多个特殊情况分析
用阮一峰曾讲过的一句话,this指向完全取决于当前执行环境

二、面试题

  		var name = "lucy";
        var obj = {
            name: "martin",
            say1: () => {
                console.log(this.name);
            },
            say2: function () {
                console.log(this.name);
            }
        };
        obj.say1();
        obj.say2();
        let say3 = obj.say1;
        let say4 = obj.say2;
        say3();
        say4();
		//lucy
		//martin
		//lucy
		//lucy

三、解析

  • obj.say1 <==> obj.say2 s1箭头函数 箭头函数中this固定化: 内部没有指定this, 所以箭头函数中绑的是上一级函数中存在的this(注意是存在的this, 而obj并不存在this, 所以继续往上找到了window)
  • obj.say3 <==> obj.say4 s3和s4虽然都指向了lucy 但是执行过程是有区别的 s3在调用时内部没有this, 所以往上找到了this指向window, 而s4是因为在window中调用了这个函数, 所以函数体内部this指向window。
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐