目录
默认绑定
全局环境中,this默认绑定到全局对象(严格模式:undefined)
在控制台中分别执行以下代码,注意,全局变量相当于window对象的属性
注意:对于默认绑定,决定this绑定对象的并不是调用位置是否处于严格模式,而是函数体是否处于严格模式。
<1> console.log(this==window) // true
<2> var a={
foo:"123",
bar:"456",
that:this
}
a.that // window
<3> this // window
函数独立调用或者被嵌套函数独立调用时,this默认绑定到window
虽然test()函数被嵌套在obj.foo()函数中,但test()函数是独立调用,而不是方法调用。所以this默认绑定到window
var a = 0;
var obj = {
a : 2,
foo:function(){
function test(){
console.log(this.a);
}
test();
}
}
obj.foo();//0
立即执行函数实际上是函数声明后直接调用执行
var a = 0;
function foo(){
(function test(){ console.log(this.a); })()
};
var obj = { a : 2, foo:foo }
obj.foo();//0
闭包中被返回到外部的函数也是独立调用
var a = 0;
function foo(){
var a = 1
function test(){
console.log(this.a);
}
return test;
};
var obj = {
a : 2,
foo:foo
}
obj.foo()();//0
隐式绑定
函数做为对象方法调用时(即方法调用),this隐式绑定到该直接对象
function foo(){
console.log(this.a);
};
var obj1 = {
a:1,
foo:foo,
obj2:{
a:2,
foo:foo
}
}
//foo()函数的直接对象是obj1,this隐式绑定到obj1
obj1.foo();//1
//foo()函数的直接对象是obj2,this隐式绑定到obj2
obj1.obj2.foo();//2
隐式丢失
隐式丢失是指被隐式绑定的函数丢失绑定对象,从而默认绑定到window,有以下几种情况会造成隐式丢失
<1>函数别名
var a = 0;
function foo(){
console.log(this.a);
};
var obj = {
a :

本文详细解析JavaScript中的this绑定规则,包括默认绑定、隐式绑定、显式绑定、new绑定以及箭头函数的情况。重点讨论了隐式丢失、显式绑定的特殊情况,以及在不同场景下判断this的通用方法。最后总结了this绑定的优先级和箭头函数的特殊性。
最低0.47元/天 解锁文章
764

被折叠的 条评论
为什么被折叠?



