深入JavaScript

深入JavaScript Day05 - 箭头函数不绑定this

2022-01-13  本文已影响0人  望穿秋水小作坊

1、var that = this这样的代码在老一些代码中经常见到,现在可以被什么替代了?

2、误区矫正:大括号不是块级作用域,也可能是在定义对象!!!

var obj = {
  name: "obj",
  foo: () => {
    // obj的大括号只是定义对象,不要认为是一个作用域
    // 所以这个函数的上层作用域是全局
    console.log(this);
  },
};

obj.foo();

function Student() {
  this.foo = () => {
    // 这个函数的上级作用域就是Student的大括号了
    console.log(this);
  };
}

var stu = new Student();
stu.foo();

3、依然会错的面试题

var name = "window";
function Person(name) {
  this.name = name;
  this.foo1 = function () {
    console.log(this.name);
  };
  this.foo2 = () => console.log(this.name);
  this.foo3 = function () {
    return function () {
      console.log(this.name);
    };
  };
  this.foo4 = function () {
    return () => {
      console.log(this.name);
    };
  };
}
var person1 = new Person('person1')
var person2 = new Person('person2')

person1.foo1()
person1.foo1.call(person2)

person1.foo2()
person1.foo2.call(person2)

person1.foo3()()
person1.foo3.call(person2)()
person1.foo3().call(person2)

person1.foo4()()
person1.foo4.call(person2)()
person1.foo4().call(person2)
上一篇下一篇

猜你喜欢

热点阅读