四种情况:

    1. 默认绑定: 直接调用函数指向window
    2. 隐式绑定: 对象里调用,绑定调用的对象
    3. new绑定
    4. 显式绑定 call apply bind

    image.png

    1. var name = 'window'
    2. var person1 = {
    3. name: 'person1',
    4. foo1: function() {
    5. console.log(this.name);
    6. },
    7. foo2: () => console.log(this.name),
    8. foo3: function() {
    9. return function() {
    10. console.log(this.name);
    11. }
    12. },
    13. foo4: function() {
    14. return () => {
    15. console.log(this.name);
    16. }
    17. }
    18. }
    19. var person2 = {name: 'person2'}
    20. person1.foo1() // person1 隐式绑定person1
    21. person1.foo1.call(person2) // person2 显式绑定person2
    22. person1.foo2() // window
    23. person1.foo2.call(person2) // window
    24. person1.foo3()() // window
    25. person1.foo3.call(person2)() // window
    26. person1.foo3().call(person2) // person2
    27. person1.foo4()() // person1
    28. person1.foo4.call(person2)() // person2
    29. person1.foo4().call(person2) // person1