【问题标题】:How will the stack of this function will look like?这个函数的堆栈会是什么样子?
【发布时间】:2011-07-21 14:14:07
【问题描述】:

当我执行以下操作时:

function makeAddFunction(amount) {
  function add(number) {
    return number + amount;
  }
  return add;
}

var addTwo = makeAddFunction(2);
var addFive = makeAddFunction(5);
alert(addTwo(1) + addFive(1));

makeAddFunction 的每个实例是否都有单独的堆栈,或者它们都将使用相同的堆栈?变量进出栈的顺序重要吗?

【问题讨论】:

  • 只有一个makeAddFunction...??你的意思是每次调用它?
  • @sje397 这不是两个不同的实例吗?那么它们如何保存同一个变量的 2 个不同值呢?
  • 有两个名为 add 的函数实例,它们是从对 makeAddFunction 的单个实例的调用中返回的,变量存储对它们的引用。
  • @sje397 Thanx,那么如果我想创建两个 makeAddFunction 实例会有什么区别?我应该只添加new吗?
  • 您可以创建两个名为 makeAddFunction 的函数实例,就像在上面的代码中为 add 所做的那样。添加new 会将makeAddFunction 视为构造函数,其中函数内部的thismakeAddFunction 类型的新对象。

标签: javascript stack


【解决方案1】:

每个函数调用都会创建一个新的Function (-Context)。所以为了快速回答这个问题,是的,他们将在 ECMAscripts Execution Contexts 方面有单独的“堆栈”。

我不太清楚你所说的“变量进入和离开堆栈的顺序”是什么意思。

ECMAscript 都是关于上下文(对象)的。有一堆按顺序调用的执行上下文。在一个上下文完成后,父上下文继续运行,直到它也完成(等等)。只要有任何上下文,该原则就会持续,如果没有,Global context 会再次引起注意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 2015-05-14
    • 2011-12-13
    • 2020-02-21
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多