观点一
作用域是在函数声明的时候就确定的一套变量访问规则,而执行上下文是函数执行时才产生的一系列变量的环境。
也就是说作用域定义了执行上下文中的变量的访问规则,执行上下文在这个作用域规则的前提下进行变量查找,函数引用等具体操作。
观点二
在MDN中,可以发现,二者其实是一个含义,只不过称呼不同,之前我也困惑了许久,下面也将使用作用域去代指执行上下文,如果还有疑问,可以在浏览器JavaScript代码执行中打个断点,在开发者工具中右侧区域可以找到scope这一栏,也侧面验证了这一点。
所以:
- 全局作用域就是全局执行上下文
- 函数作用域就是函数执行上下文
块级作用域呢?块级作用域比较特殊,它没有this,可以认为它只存在语法环境,保存这标识及其引用关系。