this
先说说函数的调用方法
1.独立调用:即一个函数声明后调用
2.方法调用:函数当作对象的方法进行调用
3.间接调用:call() apply() bind()
4.new 构造方法调用:实例化对象
函数的四种调用方法对应四种this的绑定
1.默认绑定:默认为window,即独立调用函数时this指向window
有时候会出现一个函数中嵌套一个函数(独立调用)
2.隐式绑定:当函数当作对象的方法调用,this指向当前的对象
3.显示绑定:利用call apply bind方法来改变this的指向,或者是在一个函数中直接将this绑定
4.new绑定:this指向构造方法创建出来的实例化对象
绑定丢失,就是this的指向出现了改变,一般指的是this指向该对象却指向了window
关于绑定丢失的情况有四种:
1.函数名是别名
2.函数作为参数
3.跟第二种类似,出现在内置函数中
4.函数的赋值
以下讨论这四种情况:
/*1.*/
function b(){
console.log(this)
}
var p={
b:b;
}
p.b(); //p
var c = p.b;
c(); //调用的话是window
/*2.参数传递*/
function d(b) {
b();
}
d(p.b); //window调用
/*3.内置的执行函数 setInterval setTimeout*/
setInterval(function () {
console.log(this);
}, 1000)
/*间接调用*/
var e = { a: 2 };
/* e.b = p.b;
e.b();
(e.b = p.b)();//立即执行函数,调用的是window