2

我正在尝试掌握执行上下文并对 for 循环有疑问。

考虑以下...

function copyArrayAndMutate(array, instructions) {
  let output = []
  for(let i = 0; i < array.length; i++) {
    output.push(instructions(array[i]));
  }
  return output;
}

function multiplyByTwo(input) {
  return input * 2;
}

const result = copyArrayAndMutate([1,2,3], multiplyByTwo)

在高层次上,我理解这些函数将在全局执行上下文中定义,一旦被调用,它们将创建自己的本地执行上下文,执行线程将移动到该上下文中,上下文的条目被推送到堆。

我的问题是,for 循环会有自己的执行上下文吗?如果是这样,并且执行上下文有自己的内存,那么输出如何仍然存在于 for 循环的上下文中?

这是因为 for 循环的本地执行上下文存在于 copyArrayAndMutate 的上下文中吗?

4

2 回答 2

1

我的问题是,for 循环会有自己的执行上下文吗?

不。for 循环不会有它自己的执行上下文。只有函数会创建新的执行上下文

每次调用函数时,都会创建一个新的执行上下文,即使函数调用在另一个函数定义中也是如此。该函数的可用范围由其词法环境定义:

在此处输入图像描述

无论如何,for循环的执行上下文是由copyArrayAndMutate函数创建的,也就是说for循环使用的范围是属于copyArrayAndMutate执行上下文的,这就是为什么循环可以访问output变量的原因。

于 2018-04-04T10:35:49.303 回答
0

我的问题是,for 循环会有自己的执行上下文吗?

没有。

ES6 循环和 forEach 中的上下文和变量范围

于 2018-04-04T10:27:50.303 回答