我正在尝试掌握执行上下文,并围绕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的上下文中吗?
答案 0 :(得分:1)
我的问题是,for循环是否会拥有它自己的执行上下文?
NO。 它自己的执行上下文。 只有函数会创建新的执行上下文。
每次调用函数时,即使函数调用在另一个函数定义中,也会创建一个新的执行上下文。函数可用的范围由其词法环境定义:
无论如何,for循环的执行上下文是由copyArrayAndMutate
函数创建的上下文,即for循环使用的作用域是属于copyArrayAndMutate
执行上下文的作用域,&# 39;为什么循环可以访问output
变量。
答案 1 :(得分:0)