【问题标题】:[[scopes]] and the execution context[[scopes]] 和执行上下文
【发布时间】:2018-02-23 18:12:36
【问题描述】:

当我们执行以下代码时

var addTo = (passed) =>{
    var add = (inner) => {
    var foo = () => {
        return inner + passed
    }
    return foo;
    }
  return add;
}


var addThree = addTo(3)(5);

console.dir(addThree);

我们在 chrome devtools 中得到以下内容:

我了解闭包是什么以及为什么第一个闭包显示 5 而第二个闭包显示 3。我现在似乎了解了闭包和执行上下文(堆栈)的概念,但不知道它们之间的确切关系。

  1. [[scopes]] 只是范围链的一种表示吗?
  2. 这是否与执行上下文有关?
  3. 执行上下文和闭包之间有联系吗?

【问题讨论】:

  • 你如何理解“执行上下文”这个词?
  • 执行上下文是一个堆栈,它从全局开始,每次调用函数时都会在堆栈上添加一个新上下文(带有 this 的值,以及所有变量/范围链),如果一个值是返回一个上下文被弹出堆栈
  • 是这样吗??
  • 是的,执行上下文是一个堆栈帧。只是想在回答之前确认一下。

标签: javascript scope closures


【解决方案1】:

[[scopes]] 只是作用域链的一种表示吗?

是的。

这是否与执行上下文有关?

是的。当函数被调用时(如addThree()),新的执行上下文将创建其本地函数范围以从父级[[scopes]]继承。

执行上下文和闭包之间有联系吗?

没什么特别的。当前活跃的词法环境,即(块)范围,与闭包的创建更相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多