1、Javascript变量可以保存两种不同数据类型的值:
- 基本类型值:指的是那些保存在栈内存中的简单数据段,包括5种基本数据类型:Undefined、Null、Boolean、Number和String;
- 引用数据类型值:指的是那些保存在堆内存中的对象,变量保存的是一个指针,该指针指向堆中对象保存的位置。
2、执行环境及作用域
执行环境(execution context,也称为作用域):定义了变量或函数有权访问的其它数据。
变量对象(variable object):与执行环境关联,环境中定义的所有变量和函数都保存在这个对象中。
作用域链(scope chain):当代码在一个环境中执行时,会创建由变量对象构成的一个作用域链。作用域链的前端始终是当前执行环境关联的变量对象,下一个变量对象来自包含环境,一直延续到全局执行环境。全局执行环境的变量对象始终都是作用域的最后一个对象。
作用域示例:
以上代码共涉及3个执行环境:全局环境、changeColor()的局部环境和swapColors()的局部环境。