js面试题:this指向

一、了解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。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值