美文网首页深入JavaScript
深入JavaScript Day05 - 箭头函数不绑定this

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

作者: 望穿秋水小作坊 | 来源:发表于2022-01-13 11:09 被阅读0次

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

    • 抓住箭头函数不绑定this,并且会去上层作用域中【找this指向】的特性。
    • 所以我们用箭头函数,替代了 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)
    

    相关文章

      网友评论

        本文标题:深入JavaScript Day05 - 箭头函数不绑定this

        本文链接:https://www.haomeiwen.com/subject/mylncrtx.html