今天帶大家觀察一波this指向是什么!
總結(jié)起來就六個字 誰調(diào)用,指向誰
含義: 當(dāng)一個函數(shù)沒有明確的調(diào)用對象的時候, 也就是單純作為獨(dú)立函數(shù)調(diào)用的時候, 將對函數(shù)的this使用默認(rèn)綁定: 綁定到全局的window對象
在顯式綁定下: 函數(shù)將取得在“ 包含對象“ 里的永久居住權(quán), 一直都會” 住在這里“

image.png
function fire() {
console.log(this === window); //fire此時是全局的方法,this指向window
}
fire(); // 輸出true
var a = 666;
console.log(this.a); //666 因為此時this指向了window,因而調(diào)用666
function fire() {
var a = 2;
console.log(this.a); //666 因為此時this指向了window,因而調(diào)用666
function innerFire() {
var a = 3;
console.log(this.a); //666 因為此時this指向了window,因而調(diào)用666
}
innerFire();
}
fire(); //輸出1
var a = 666;
console.log(a); //666 a在全局作用域
function fire() {
var a = 777;
console.log(a); //777 fire函數(shù)作用域
function innerFire() {
var a = 999;
console.log(a); //999 此時打印輸出a,a在innerFIre作用域。從自身作用域查找變量,未找到才往上查找
}
innerFire();
}
var obj = {
b:2,
fire: function () { //此時函數(shù)的this被隱式綁定到了對象obj
console.log(this == obj); // obj中有fire函數(shù),因而默認(rèn)this指向obj
console.log(this.b); // 2 this.a 相當(dāng)于obj.b =2
}
}
obj.fire(); // 輸出2
全局環(huán)境作用域: this在全局環(huán)境始終指向window
var a = 1
function test () {
console.log(this.a)
}
var obj = {
a: 2,
test
}
var obj0 = {
a: 3,
obj
}
obj0.obj.test()//2,總是找他上一級的對象所以就是obj