JS 中作用域

305 阅读2分钟

##作用域 我们可以理解为代码起作用的区域

JS中的作用域 有两种,分别是全局作用域 和 私有作用域
作用域 也可以说就是一块栈内存

栈内存 存储值类型 提供代码的运行环境 堆内存 存储引用数据类型

    全局作用域:   页面一打开就会形成一个全局作用域  一个页面只有一个全局作用域
    私有作用域:   函数执行的时候会 形成一个私有的作用域  

    全局变量     在全局声明的变量 叫做全局变量
    私有变量     在私有作用域声明的变量  叫做私有变量   形参也是私有变量 

    上级作用域   外层作用域:查找规律,上级作用域是谁,就看这个函数是在哪个作用域声明定义的
                  对于私有作用域中的某些变量      若没有在私有作用域中声明过,那么函数执行时就会去上级作用域查找该变量    上级作用域若没有该变量  则 接着向上级查找,
                  直到查找到全局作用域 若仍没有 则报错:
    作用域链:     变量的查找机制    一直向上级作用域查找


    函数执行的过程  也可以这样理解
       先开辟一个私有作用域(栈内存),形参赋值,然后变量提升   然后代码从上向下执行,
       私有变量有:   形参  私有作用域中声明过的变量   其他的变量都是上级作用域的,
       暂时性时区   在let 和const之前 不能使用他们声明的任何变量

    es6 针对 let和 const 声明的变量  多了一个块级作用域({}),   理解成一个私有作用域即可 
    
    
堆内存的销毁 
用谷歌浏览器为例子; 会定期的查看整个堆内存   把没有被引用的堆内存销毁掉 (回收)
    
    栈内存的销毁 
          全局作用域对应的栈内存:关闭页面的时候才会被销毁
          私有作用域对应的栈内存:一般情况下 函数执行完成  对应的栈内存就会被销毁
              当返回值是个引用数据类型时 不会被销毁