今天带大家观察一波this指向是什么!
总结起来就六个字 谁调用,指向谁
含义: 当一个函数没有明确的调用对象的时候, 也就是单纯作为独立函数调用的时候, 将对函数的this使用默认绑定: 绑定到全局的window对象
在显式绑定下: 函数将取得在“ 包含对象“ 里的永久居住权, 一直都会” 住在这里“
function fire() {
console.log(this === window); //fire此时是全局的方法,this指向window
}
fire(); // 输出true
var a = 666;
console.log(this.a); //666 因为此时this指向了window,因而调用666
function fire() {
var a = 2;
console.log(this.a); //666 因为此时this指向了window,因而调用666
function innerFire() {
var a = 3;
console.log(this.a); //666 因为此时this指向了window,因而调用666
}
innerFire();
}
fire(); //输出1
var a = 666;
console.log(a); //666 a在全局作用域
function fire() {
var a = 777;
console.log(a); //777 fire函数作用域
function innerFire() {
var a = 999;
console.log(a); //999 此时打印输出a,a在innerFIre作用域。从自身作用域查找变量,未找到才往上查找
}
innerFire();
}
var obj = {
b:2,
fire: function () { //此时函数的this被隐式绑定到了对象obj
console.log(this == obj); // obj中有fire函数,因而默认this指向obj
console.log(this.b); // 2 this.a 相当于obj.b =2
}
}
obj.fire(); // 输出2
全局环境作用域: this在全局环境始终指向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