js中的this指针前端面试题(苏宁总部-苏宁易购前端面试)

893 阅读2分钟

博主相关个人技术博客、微信公众号、视频号、设计作品集


之前博主去苏宁总部面试的分享漏了一个this指针的面试题,整理如下,问了两个方面。

有兴趣的猿友可以 点击这里 查看之前面试分享。

this指向有哪几种情况:

  • 全局作用域或者普通函数自执行中this指向全局对象window
  • 事件函数内部的this指向事件源:注意在事件函数中如果包含普通函数,普通函数自执行后,内部this还是指向window
  • 对象方法调用时,this指向调用的对象

1、全局作用域 / 普通函数中的this

this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this指向的是window;当函数被作为某个对象的方法调用时,this就等于那个对象。

//全局作用域
console.log(this);   //Window

//普通函数
function fn(){
    console.log(this); //Window
}

2、事件函数中的this指向事件源

3、对象方法调用时,this指向调用的对象

let obj = {
    name : "lanlan",
    fn : function(){
        console.log(this);
    },
    lacy:{
        name : "didi",
        fn : function(){
            let num = 10;
            console.log(this);
       }
    }
};

obj.fn();   //obj
obj.dudu.fn();   //lacy

4、类实例来调用函数时,this指向实例

class B {
  fn() {
    console.log(this)
  }
}
var b = new B()
var fun = b.fn
b.fn()  // 指向 b
fun()  // undefined

ES6 下的 class 内部默认采用的是严格模式,fun不会指定全局对象为默认调用对象

5、 ES6箭头函数的this

箭头函数中的this始终指向箭头函数定义时的离this最近的一个函数,如果没有最近的函数就指向window

箭头函数的this是在定义函数时绑定的,不是在执行过程中绑定的。简单的说,函数在定义时,this就继承了定义函数的对象。

补充:

箭头函数和普通函数相比,有以下几个区别,在开发中应特别注意:

  • 不绑定 arguments 对象,也就是说在箭头函数内访问 arguments 对象会报错;
  • 不能用作构造器,也就是说不能通过关键字 new 来创建实例;
  • 默认不会创建 prototype 原型属性;
  • 不能用作 Generator() 函数,不能使用 yeild 关键字。

微信公众号: 情非得已小猿猿(FrontendApe)