函数调用的方法一共有 4 种
- 作为一个函数调用,this永远都是window
- 作为对象方法调用,this就是调用方法的对象,this 永远指向最后调用它的那个对象
- 使用构造函数调用函数,this就是新创建的对象
- 使用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
例4:myFunction()作为构造函数,this指向新创建的obj,符合规则3
1.在全局作用域中this代表window
2.箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this。
例5:obj.b.c()只是对象的嵌套,c对应的箭头函数是上一层作用域即全局的window
38道this测试题重难点
38道关于this的面试题,万字解析,让你彻底理解 this 的指向问题-CSDN博客