this的绑定(四种绑定)
this的默认绑定
当一个函数没有明确的调用对象的时候,也就是单纯作为独立函数调用的时候,将对函数的this使用默认绑定:绑定到全局的window对象
例子1:
function foo(){ console.log(this===window) } foo();//true
重点:迷惑性的例子
function fn(){ function fn1(){ console.log(this===window); } fn1(); } fn();//true
函数fn1在一个外部函数fn里面声明并且调用了,他的this依然指向window,因为【没有明确的调用对象时,讲对函数的this使用默认绑定:绑定到全局的window对象】
加强版迷惑例子:
var obj = { fn:function(){ function innerfn(){ console.log(this===window); } innerfn();//独立调用 } } obj.fn();//true
这里例子中,obj.fn()调用实际上是用了this的隐式绑定
【总结】凡是函数作为独立函数调用,无论它的位置在哪,它行为表现都和直接在全局环境中调用无异
this的隐式绑定
当函数被一个对象所“包含”的时候,我们称函数的this被隐式绑定到这个对象里面,这时候,通过this可以直接访问所绑定的对象里面的其他属性
例子:
var obj = { a:1, fn:function(){ console.log(this); function fn1(){ console.log(this); } fn1(); } } obj.fn();
结果