首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript-函数是否可以分别看作是一个执行上下文?

JavaScript-函数是否可以分别看作是一个执行上下文?
EN

Stack Overflow用户
提问于 2020-05-28 16:12:38
回答 1查看 25关注 0票数 0

在下面的示例中,为什么作为方法分配给带有标识符outer的对象属性的函数meth没有执行上下文,即inner-function中的this

由于分配给meth的函数this-keyword似乎自动将this-keyword设置为执行上下文,因此您可以假设,函数inner的处理方式是相同的,还是因为不能将周围的函数视为执行上下文,因此JavaScript不知道它所处的执行上下文的函数inner,因此它假设默认情况,即window

代码语言:javascript
复制
var foo = {
    meth: function outer() {
        console.log(this);
        // let that = this;
        function inner() {
            console.log(this);
        }
        inner();
    }
};
代码语言:javascript
复制
//Output
{meth: ƒ}
Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}

提前感谢你的揭秘

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-28 16:17:48

当您看到此代码时:

代码语言:javascript
复制
function inner() {
    console.log(this);
}
inner();

该代码是否发生在另一个函数体中,或者该函数体是否属于某个对象的方法...etc,都与此无关。这是无关紧要的。

与此相关的是如何称呼inner。您不称它为someobject.inner(),也不使用显式绑定,比如inner.call(this),.因此,不存在this的绑定,因此您将得到默认绑定,即在软盘模式下运行时的window对象,或在严格模式下运行的undefined

分配给meth的函数outer似乎自动将this-keyword设置为周围的对象作为执行上下文

这是没有保证的。如果你这样做了:

代码语言:javascript
复制
let outer = meth.outer;
outer();

...then --您会注意到,this也得到了默认绑定。同样,这取决于您如何调用该函数。

如果使用点表示法调用它,则可以隐式地将其与对象绑定:

代码语言:javascript
复制
meth.outer();

因此,现在thisouter的执行上下文中将是meth

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62069435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档