函数调用都有与之相关的作用域和上下文。从根本上说,范围是基于函数(function-based)而上下文是基于对象(object-based)。换句话说,作用域是和每次函数调用时变量的访问有关,并且每次调用都是独立的。上下文总是关键字 this 的值,是调用当前可执行代码的对象的引用。
首先,执行环境的概念:执行环境是JavaScript重要的概念
执行环境(分为全局环境局部环境两类)决定了他们各自的行为,
每个执行环境都有一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
比如,在web浏览器中,全局环境的执行环境被认为是window对象,因此所有函数,对象都是作为window对象的属性和方法创建的。。
其次。每个函数都拥有自己的执行环境,当执行环境进入一个函数内,
当代码在一个环境中执行时,会创建变量对象的一个作用域链
(scope chain)。作用域链的作用是为了保证所有变量和函数的有序执行。
作用域链的前端,始终都是当前执行的代码所在环境的变量对象。
作用域链的一下面是来自外部环境。
作用域链的长短是可以延长的
可以通过以下2种方式
try catch中的catch块
with语句