##做用域 咱们能够理解为代码起做用的区域es6
JS中的做用域 有两种,分别是全局做用域 和 私有做用域
做用域 也能够说就是一块栈内存浏览器
栈内存 存储值类型 提供代码的运行环境 堆内存 存储引用数据类型函数
全局做用域: 页面一打开就会造成一个全局做用域 一个页面只有一个全局做用域
私有做用域: 函数执行的时候会 造成一个私有的做用域
全局变量 在全局声明的变量 叫作全局变量
私有变量 在私有做用域声明的变量 叫作私有变量 形参也是私有变量
上级做用域 外层做用域:查找规律,上级做用域是谁,就看这个函数是在哪一个做用域声明定义的
对于私有做用域中的某些变量 若没有在私有做用域中声明过,那么函数执行时就会去上级做用域查找该变量 上级做用域若没有该变量 则 接着向上级查找,
直到查找到全局做用域 若仍没有 则报错:
做用域链: 变量的查找机制 一直向上级做用域查找
函数执行的过程 也能够这样理解
先开辟一个私有做用域(栈内存),形参赋值,而后变量提高 而后代码从上向下执行,
私有变量有: 形参 私有做用域中声明过的变量 其余的变量都是上级做用域的,
暂时性时区 在let 和const以前 不能使用他们声明的任何变量
es6 针对 let和 const 声明的变量 多了一个块级做用域({}), 理解成一个私有做用域便可
堆内存的销毁
用谷歌浏览器为例子; 会按期的查看整个堆内存 把没有被引用的堆内存销毁掉 (回收)
栈内存的销毁
全局做用域对应的栈内存:关闭页面的时候才会被销毁
私有做用域对应的栈内存:通常状况下 函数执行完成 对应的栈内存就会被销毁
当返回值是个引用数据类型时 不会被销毁
复制代码