JavaScript函数是否可以分别视为执行上下文?
在下面的示例中,为什么作为方法分配给标识符为JavaScript函数是否可以分别视为执行上下文?,javascript,function,this,executioncontext,Javascript,Function,This,Executioncontext,在下面的示例中,为什么作为方法分配给标识符为meth的对象属性的函数outer没有执行上下文,而该执行上下文将是inner函数中的this 由于分配给meth的函数outer似乎会自动将this-关键字设置为周围对象的执行上下文,因此您可以假设,函数inner的处理方式相同,或者是因为周围函数不能被视为执行上下文,因此,JavaScript不知道函数内部所处的执行上下文,因此它假定默认值为窗口 var foo = { meth: function outer() { co
meth
的对象属性的函数outer
没有执行上下文,而该执行上下文将是inner
函数中的this
由于分配给
meth
的函数outer
似乎会自动将this
-关键字设置为周围对象的执行上下文,因此您可以假设,函数inner
的处理方式相同,或者是因为周围函数不能被视为执行上下文,因此,JavaScript不知道函数内部
所处的执行上下文,因此它假定默认值为窗口
var foo = {
meth: function outer() {
console.log(this);
// let that = this;
function inner() {
console.log(this);
}
inner();
}
};
当您看到以下代码时,请提前感谢您解开谜团:
function inner() {
console.log(this);
}
inner();
代码是否出现在另一个函数体中,或者该函数体是否属于某个对象的方法,等等,都是无关紧要的。这无关紧要
相关的是如何调用internal
。您不能将其称为someobject.inner()
,也不能使用显式绑定,如inner.call(this)
。。。因此,此没有绑定,因此您将获得默认绑定,即在草率模式下运行时的窗口
对象,或在严格模式下运行时的未定义
分配给meth
的函数outer
似乎会自动将this
-关键字设置为周围对象的执行上下文
这是不确定的。如果您这样做:
let outer = meth.outer;
outer();
…然后您会注意到,此
也将获得默认绑定。同样,这取决于调用函数的方式
如果使用点表示法调用它,则隐式地将其与对象绑定:
meth.outer();
所以现在
这个
将是meth
在外部
的执行上下文中“您可以假设,内部函数的处理方式是相同的”-为什么您可以假设呢?这是一个不同的函数,调用方式也不同。“因为outer
似乎会自动将this关键字设置为周围对象的执行上下文”-不,它不会自动获取该关键字。在代码中,您甚至没有显示如何调用它。内部
函数不是从对象调用的此
指调用函数的对象。e、 g.这个。该行为在和下的规范中定义(无论是否在严格的模式代码中发生)
meth.outer();