在下面的示例中,为什么作为方法分配给带有标识符outer的对象属性的函数meth没有执行上下文,即inner-function中的this?
由于分配给meth的函数this-keyword似乎自动将this-keyword设置为执行上下文,因此您可以假设,函数inner的处理方式是相同的,还是因为不能将周围的函数视为执行上下文,因此JavaScript不知道它所处的执行上下文的函数inner,因此它假设默认情况,即window。
var foo = {
meth: function outer() {
console.log(this);
// let that = this;
function inner() {
console.log(this);
}
inner();
}
};//Output
{meth: ƒ}
Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}提前感谢你的揭秘
发布于 2020-05-28 16:17:48
当您看到此代码时:
function inner() {
console.log(this);
}
inner();该代码是否发生在另一个函数体中,或者该函数体是否属于某个对象的方法...etc,都与此无关。这是无关紧要的。
与此相关的是如何称呼inner。您不称它为someobject.inner(),也不使用显式绑定,比如inner.call(this),.因此,不存在this的绑定,因此您将得到默认绑定,即在软盘模式下运行时的window对象,或在严格模式下运行的undefined。
分配给
meth的函数outer似乎自动将this-keyword设置为周围的对象作为执行上下文
这是没有保证的。如果你这样做了:
let outer = meth.outer;
outer();...then --您会注意到,this也得到了默认绑定。同样,这取决于您如何调用该函数。
如果使用点表示法调用它,则可以隐式地将其与对象绑定:
meth.outer();因此,现在this在outer的执行上下文中将是meth。
https://stackoverflow.com/questions/62069435
复制相似问题