this指向

48 阅读1分钟

函数调用的方法一共有 4 种

  1. 作为一个函数调用,this永远都是window
  2. 作为对象方法调用,this就是调用方法的对象,this 永远指向最后调用它的那个对象
  3. 使用构造函数调用函数,this就是新创建的对象
  4. 使用call和apply调用时,this就是指定的那个对象

this、apply、call、bind这又是一个面试经典问题~/(ㄒoㄒ)/~~也是 ES5中众多坑中的一个,在 ES - 掘金 (juejin.cn)

例1 : fn()是符合规则1的函数调用

var name = "windowsName";
var a = {
    name : null,
    // name: "Cherry",
    fn : function () {
        console.log(this.name);      // windowsName
    }
}
var f = a.fn;
f();

例2: fn()和innerFunction()都是符合规则1 的函数调用

var name = "windowsName";
function fn() {
    var name = 'Cherry';
    innerFunction();
    function innerFunction() {
        console.log(this.name);      // windowsName
    }
}

fn()

例3:window.a.fn()作为对象方法调用,符合规则2

1724225537634.png

例4:myFunction()作为构造函数,this指向新创建的obj,符合规则3

1724225313348.png

1.在全局作用域中this代表window

2.箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this。

例5:obj.b.c()只是对象的嵌套,c对应的箭头函数是上一层作用域即全局的window 1724228280725.png

38道this测试题重难点

38道关于this的面试题,万字解析,让你彻底理解 this 的指向问题-CSDN博客

1724231151572.png

题目:回调函数

1724230343758.png

1724230482283.png