JavaScript中的执行上下文

时间:2018-04-04 10:22:55

标签: javascript executioncontext

我正在尝试掌握执行上下文,并围绕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的上下文中吗?

2 个答案:

答案 0 :(得分:1)

  

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

NO。 它自己的执行上下文。 只有函数会创建新的执行上下文

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

enter image description here

无论如何,for循环的执行上下文是由copyArrayAndMutate函数创建的上下文,即for循环使用的作用域是属于copyArrayAndMutate执行上下文的作用域,&# 39;为什么循环可以访问output变量。

答案 1 :(得分:0)

  

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

不。

Context and variable scope in ES6 loops and forEach