解析器在调用函数时每次都会向函数内部传递进一个隐含的参数
这个隐含的参数就是this,this指向的是一个对象,称为函数执行的上下文对象
根据函数的调用方式的不同,this指向不同的对象
- 以函数的形式调用时,this永远都是window
- 以方法的形式调用时,this就是调用方法的那个对象
function fun() {
console.log(this);
}
let obj = {
name: 'fj',
sayName: fun,
}
fun(); //object: window
obj.sayName(); //object: obj
console.log(fun() === obj.sayName()); //true
//创建一个name变量
let name = '全局';
function fun() {
console.log(name);
}
let obj = {
name: 'fj',
sayName: fun,
}
fun(); // 全局
obj.sayName(); //全局 因为调用obj.sayName方法时调用了fun函数,
//fun自己里面没有name于是在全局中找到了name
//创建一个name变量
let name = '全局';
function fun() {
console.log(this.name);
}
let obj = {
name: 'fj',
sayName: fun,
}
fun(); // 无 此时this指向的是window,无name属性
obj.sayName(); //fj 此时this指向的是obj,name的值为fj