Javascript Arrow函数具有这种行为
请告诉我这两种情况下的行为。为什么一个显示“窗口”,另一个显示“对象”。尽管回调以相同的方式调用它们 案例:1Javascript Arrow函数具有这种行为,javascript,this,Javascript,This,请告诉我这两种情况下的行为。为什么一个显示“窗口”,另一个显示“对象”。尽管回调以相同的方式调用它们 案例:1 let army = { minAge: 18, maxAge: 27, canJoin(user) { console.log(this); } }; function karan(callback){ callback(); } karan(army.canJoin); 结果是窗口对象 案例:2 le
let army = {
minAge: 18,
maxAge: 27,
canJoin(user) {
console.log(this);
}
};
function karan(callback){
callback();
}
karan(army.canJoin);
结果是窗口对象
案例:2
let army = {
minAge: 18,
maxAge: 27,
canJoin(user) {
console.log(this);
}
};
function karan(callback){
callback();
}
karan( () => army.canJoin());
结果:对象在案例1中,您正在经历有时称为“上下文丢失”的情况。一旦函数
army.canJoin
被传递到karan
,它将丢失army
的“上下文”,因此此
默认为窗口
对象
在案例2中,如果执行army.canJoin()
,则调用的是canJoin
“作为army的一种方法”,而不是作为一个独立函数。这意味着此
将是您用来通过点运算符访问canJoin
的对象
有关详细信息:
此
是上下文对象,将在执行时传递给函数。指定上下文的方法之一是将其作为对象上的方法调用
案例:1
let army = {
minAge: 18,
maxAge: 27,
canJoin(user) {
console.log(this);
}
};
function karan(callback){
callback();
}
karan(army.canJoin);
您只将函数army.canJoin
发送到karan
作为callback
karan(army.canJoin);
function karan(callback){
callback(); // when the function is called here, there is no explicit context,
// `this` will default to the window object in browser environment.
}
此时,函数与原始上下文对象分离,然后在调用callback()
案例:2
let army = {
minAge: 18,
maxAge: 27,
canJoin(user) {
console.log(this);
}
};
function karan(callback){
callback();
}
karan( () => army.canJoin());
当原始上下文附加到该函数时,将执行该函数
army.canJoin() // the context or `this` is still army object
请注意,对于此特定情况。它与箭头功能无关,
如果执行以下操作,您仍将获得此
作为陆军对象
karan(function(){ army.canJoin() })
这回答了你的问题吗?