变量、作用域、内存---part4

255 阅读1分钟

当代码在一个环境中执行的时候会创建变量对象的一个作用域链(scope chain),作用域链的作用是保证执行环境有权访问相应的变量,作用域链的前端始终都是当前执行的代码所在环境的变量对象,最后端的始终都是全局环境的变量对象(global)
这么讲有点抽象,不过我们简单的画个图片应该就好理解

而且我们这个作用域链只能从“内”到“外”,不能反向取变量,我们接下来用代码举个栗子

我这里在全局环境里面定义了两个变量

在全局环境里面定义了一个函数,函数里面有两个小变量,分别让这两个小变量获取到全局变量(外层),并且把它们两个返回出来

我们在局部环境依然取到了全局的变量
但是我们在全局环境尝试直接取内部的变量是取不到的会报错!
作用域链的解析是一级一级往上搜索的过程,如果最终在全局里面找不到对应的变量,一般会报错(在新的Es7语法中软化了这种问题)