zoukankan      html  css  js  c++  java
  • 函数的创建与执行,执行函数

    创建一个函数

    1. 开辟一个堆内存(16进制的内存地址:AAAFFF111)
    2. 声明当前函数的作用域(在哪个上下文中创建的,它的作用域就是谁)
    3. 把函数体中的代码当做“字符串”存储在堆内存中(创建一个函数,存储的是一堆字符串,所以函数只要不执行,函数其实没啥意义)
    4. 把函数堆的地址类似于对象一样,放置在栈中供变量调用(函数名)

    执行函数

      1. 每一个函数执行会形成一个全新的私有上下文 EC(xx)(目的是供函数体中的代码执行),然后进栈执行

      2. 在私有上下文中有一个存放私有变量的变量对象 AO(xx)

      3. 在代码执行之前要做的事情很多:

        1. 初始化它的作用域链 <自己上的上下文,函数的作用域>
        2. 初始化THIS (箭头函数没有THIS)
        3. 初始化ARGUMENTS实参集合(箭头函数没有ARGUMENTS)
        4. 形参赋值(形参变量是函数的私有变量,需要存储在AO中的)
        5. 变量提升(在私有上下文中声明的变量都是私有变量)
      4. 代码执行(把之前在函数堆中存储的字符串,拿过来在上下文中依次执行)

      5. 根据实际的情况确定当前上下文是否出栈释放

        1. 为了保证栈内存的大小(内存优化),一般情况下,如果当前函数执行产生的上下文,在进栈且代码执行完成后,会把次上下文移除栈(上下文释放到了:之前在上下文中存储的私有的变量等信息也就有跟着释放了) =>全局上下文是在打开页面生成的,也需要在关闭页面的时候释放掉(只有页面关闭才会被释放掉)

        2. 特殊情况:只要当前上下文中的某些内容,被上下文以外的东西占用,那么当前上下文是不能被释放的(上下文中存储的变量等信息也保留下来了) =>这种情况就是大家认为的闭包

  • 相关阅读:
    sqlite3中给表添加列
    webpack打包后服务端__dirname失效问题
    nodejs查看本机hosts文件域名对应ip
    vscode远程调试node服务端
    git 删除错误commit
    npm安装模块没有权限解决办法
    node gyp编译所需要的环境
    npm和yarn的淘宝镜像添加
    笨办法学Python 笔记
    梯度下降法优化线性回归算法参数
  • 原文地址:https://www.cnblogs.com/zhx119/p/14263905.html
Copyright © 2011-2022 走看看