# 作用域和作用域链

# 是什么【本质】

就是代码的执行环境,所以可以把他看成是一个对象,这个对象中保存着代码执行所需要的变量(形参,this,内部声明的变量)。在js中,分为全局作用域函数作用域,es6新增了一个块级作用域

全局作用域

在浏览器端-全局作用域对象指向window,在服务器端node-全局作用域对象指向global

# 怎么做【原理】

函数在执行的时候,也叫做进入执行环境,会把函数体内varfuntion声明的变量,形参变量this对象,保存在一个对象(作用域对象)中,然后继续执行,当再遇到函数执行,就进入函数内部也就是再次进去执行环境,后面同上。如此反复,就创建了多个作用域对象,这些作用域对象保存在[[scope]]中。注意在函数执行过程中,访问的变量在当前作用域对象找不到,就会向上层作用域对象去找,如此反复【这就形成了作用域链】,如果在最外层作用域对象都找到,就会抛出错误。

注意

  • 进行执行环境也就是创建当前函数的作用域对象。

  • 函数执行完,垃圾回收站会把没有被引用的变量进行回收。

Last Updated: 5/14/2022, 11:15:10 PM