&引用;“调用上下文”;及;“执行上下文”;在javascript中:我们谈论的是同一件事吗?

&引用;“调用上下文”;及;“执行上下文”;在javascript中:我们谈论的是同一件事吗?,javascript,Javascript,有时我读“调用上下文”,有时读“执行上下文”。我想知道我们是否在谈论同一个概念 我必须说,在ECMAScript 6规范中,我没有找到任何对“调用上下文”的引用 这两个术语密切相关,但不是一回事。 简而言之,它们定义了作用域与上下文。作用域是关于代码运行的环境(有点像一个房间——它是关于代码所在的位置),而上下文是关于导致执行某些代码的实际对象(比如谁负责将您放在那个房间) “执行上下文”指的是处于 某些代码运行时的效果。范围链是一个 应(按特定顺序)检查的内存位置 要解析为的标识符(变量、常量

有时我读“调用上下文”,有时读“执行上下文”。我想知道我们是否在谈论同一个概念

我必须说,在ECMAScript 6规范中,我没有找到任何对“调用上下文”的引用

这两个术语密切相关,但不是一回事。 简而言之,它们定义了作用域与上下文。作用域是关于代码运行的环境(有点像一个房间——它是关于代码所在的位置),而上下文是关于导致执行某些代码的实际对象(比如谁负责将您放在那个房间)

“执行上下文”指的是处于 某些代码运行时的效果。范围链是一个 应(按特定顺序)检查的内存位置 要解析为的标识符(变量、常量和函数名) 价值。因为JavaScript是在单线程中执行的 环境中,一次只能执行一个任务。当前 执行代码(及其关联范围)定义执行 上下文

一个简单的例子如下所示:

//此区域位于全局执行上下文(范围)中,因为代码是
//未包装在函数或任何其他类型的代码块中。
var x=“全球”;
//“全局”是结果,因为JavaScript引擎将始终
//在有关标识符的声明的当前范围中。
//它会在全局范围内找到“x”的声明,所以
//这就是它将使用的值。
控制台日志(x);
var y=“也是全局的”;
函数父函数(){
//此区域位于“父”执行上下文(范围)中
var x=“父级”;
//“parent”是结果(而不是“Global”),因为当此函数
//执行时,它的作用域是最容易访问的
//首先看这里,找出“x”是什么,这就是变量
//“隐藏”,因为父范围中的x隐藏全局范围中的x。
控制台日志(x);
函数子(){
//此区域位于“子”执行上下文(范围)中
var x=“child”;
//“子项”是结果(不是“全局”或“父项”),因为
//函数正在执行,其作用域是最可访问的
//JavaScript引擎首先在这里查找“x”是什么
//现在,x将在父对象中隐藏x,这将在全局对象中隐藏x。
控制台日志(x);
//这里的结果是“也是全局的”。首先是当前执行
//已检查上下文(范围)中是否存在“y”变量。没有,
//因此,范围链中的下一个范围(函数父级)被选中。
//这里也没有“y”字。所以,再一次,下一个最高点
//检查链(全局)中的范围,即“y”所在的位置
//已找到,因此使用该“y”的值。
控制台日志(y);
//在这里,我们将得到“未定义”。链中的所有作用域都将
//检查一下,如果我们一直到全球,但仍然没有
//找到“z”的声明,就没有其他范围可查看了。
控制台日志(z);
}
child();
}
父项()这两个术语密切相关,但不是一回事。
简而言之,它们定义了作用域与上下文。作用域是关于代码运行的环境(有点像一个房间——它是关于代码所在的位置),而上下文是关于导致执行某些代码的实际对象(比如谁负责将您放在那个房间)

“执行上下文”指的是处于 某些代码运行时的效果。范围链是一个 应(按特定顺序)检查的内存位置 要解析为的标识符(变量、常量和函数名) 价值。因为JavaScript是在单线程中执行的 环境中,一次只能执行一个任务。当前 执行代码(及其关联范围)定义执行 上下文

一个简单的例子如下所示:

//此区域位于全局执行上下文(范围)中,因为代码是
//未包装在函数或任何其他类型的代码块中。
var x=“全球”;
//“全局”是结果,因为JavaScript引擎将始终
//在有关标识符的声明的当前范围中。
//它会在全局范围内找到“x”的声明,所以
//这就是它将使用的值。
控制台日志(x);
var y=“也是全局的”;
函数父函数(){
//此区域位于“父”执行上下文(范围)中
var x=“父级”;
//“parent”是结果(而不是“Global”),因为当此函数
//执行时,它的作用域是最容易访问的
//首先看这里,找出“x”是什么,这就是变量
//“隐藏”,因为父范围中的x隐藏全局范围中的x。
控制台日志(x);
函数子(){
//此区域位于“子”执行上下文(范围)中
var x=“child”;
//“子项”是结果(不是“全局”或“父项”),因为
//函数正在执行,其作用域是最可访问的
//JavaScript引擎首先在这里查找“x”是什么
//现在,x将在父对象中隐藏x,这将在全局对象中隐藏x。
控制台日志(x);
//这里的结果是“也是全局的”。首先是当前执行
//已检查上下文(范围)中是否存在“y”变量。没有,
//因此,范围链中的下一个范围(函数父级)被选中。
//这里也没有“y”字。所以,再一次,下一个最高点
//检查链(全局)中的范围,即“y”所在的位置
//已找到,因此使用该“y”的值。
控制台日志(y);
//在这里,我们将得到“