zoukankan      html  css  js  c++  java
  • 闭包,作用域,作用域链

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

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

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

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

    闭包流程图片

    1. 闭包准备阶段

      完成外层循环调用

      

    1. 调用内层循环

      

      3.再次调用内层循环

       

      4.调用结束后

       

    作用域:变量的可用范围

    1. 全局作用域window

    包含全局变量

    1. 局部作用域

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

    函数生命周期:

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

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

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

       

    2.定义函数时

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

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

       

      3.调用函数时

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

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

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

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

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

        

       

    4. 调用函数后

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

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

       

       

    作用域链

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

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

  • 相关阅读:
    python实战===python程序打包成exe
    python基础===100盏灯的问题
    安全测试===dos攻击和ddos攻击
    Ubuntu16.04安装Consul
    kerberos相关
    Linux终端复制粘贴后前后会多出0~和~1
    Superset配置impala数据源
    Airflow使用指南
    Superset配置hive数据源
    Superset配置mysql数据源
  • 原文地址:https://www.cnblogs.com/yqycr7/p/11334978.html
Copyright © 2011-2022 走看看