闭包,作用域,作用域链

全局变量:可以在任何地方反复使用的变量,但可能会造成全局污染

局部变量:不可以重复使用,只在函数中使用

闭包:优点:可重用变量,又可以保护变量不受污染的机制

           缺点:比一般的函数更占用内存

闭包流程图片

  1. 闭包准备阶段

  完成外层循环调用

  

  1. 调用内层循环

  

  3.再次调用内层循环

   

  4.调用结束后

   

作用域:变量的可用范围

  1. 全局作用域window

包含全局变量

  1. 局部作用域

包含局部变量,在函数体内,局部变量的优先级高于同名的全局变量。   

函数生命周期:

1. 开始执行前(生命提前阶段)

 创建执行环境栈(数组):临时保存正在执行的函数的执行环境

向执行环境中添加第一个默认程序main(),该方法创建出一个全局作用域的对象window

   

2.定义函数时

创建函数对象,封装函数的定义

声明函数变量,引起了函数对象,函数对象的scope属性引用回,创建函数时的作用域

   

  3.调用函数时

在ECS中加入一个新的元素并记录新函数的调用

创建一个活动对象,保存本次调用用到的局部变量

ECS中的新执行环境元素引用活动对象

活动对象中的parent属性引用函数的scope指向副局作用域对象

(前提是活动作用域中没有局部变量,才沿着parent向父级作用域找)

    

   

4. 调用函数后

                    执行环境栈中本次函数的执行环境出栈

                             导致活动对象被释放,导致局变量一同释放

   

   

作用域链

  右多级作用域连续引用形成的链式结果

            掌握一切变量的使用顺序 :先在局部照,没有则延作用域链向父级作用域中找

原文地址:https://www.cnblogs.com/yqycr7/p/11334978.html