zoukankan      html  css  js  c++  java
  • js执行上下文与执行上下文栈

                js执行上下文对象与执行上下文栈

      在了解js的执行上下文对象与执行上下文栈之前,我们要先了解两个概念 即变量提升跟函数提升

        变量提升 : 通过var定义的变量,在定义语句之前我们就可以直接访问到,不过它的值是undefined

        函数提升:  通过function定义的函数,在函数定义语句前,我们就可以直接调用

        变量提升与函数提升都是js引擎的预处理产生的 ,先是变量提升,然后才是函数提升.

      执行上下文对象

        全局执行上下文:  ( 确定执行上下文对象==>预处理==>执行代码 )

          1. 在执行全局代码前将window确定为全局执行上下文对象

          2. 对全局数据进行预处理:

            对变量进行提升,值设置为undefined.并添加为window对象的属性

            对函数进行提升并赋值.添加为window对象的方法

            将this赋值为window;

          3. 最后开始执行全局代码

        

         函数执行上下分: ( 调用函数==>创建函数执行上下文对象==>预处理==>执行函数体 )

          1. 在调用函数,准备执行函数体代码之前,创建对应的函数执行上下文对象  (虚拟的,存于栈中)

          2. 对局部数据进行预处理:

             把实参赋值给形参,添加为该执行上下文对象的属性

             变量提升

             函数提升

             把this赋值给调用该函数的对象

          3. 开始执行函数体代码

       执行上下文栈  :   (为了方便管理,js隐藏会创建一个栈来统一管理执行上下文对象)

         1.在全局代码执行前,js引擎创建一个栈,用于管理所有的执行上下文对象

         2. 全局执行上下文对象(window)确定后,将其放入到栈中

         3. 调用函数时,会创建一个此函数的执行上下文对象,并放到栈中

         4. 函数执行完,js引擎会将其对应的执行上下文对象从栈中移除

         5. 所有的代码执行完后,栈中只剩window

      21:06:33

          

  • 相关阅读:
    深入理解Java并发之synchronized实现原理
    Untracked Files Prevent Checkout move or commit them before checkout
    java代码在开始事务后,先做了一个查询,再insert,此时会报: java.sql.SQLException: could not retrieve transation read-only status server
    Java 实例
    java队列——queue详细分析
    Jquery 获取table当前行内容
    Java list 分页(多种方式)
    获取当天的开始时间、结束时间等等的一个工具类
    java list按照元素对象的指定多个字段属性进行排序
    [译] OpenStack Kilo 版本中 Neutron 的新变化
  • 原文地址:https://www.cnblogs.com/buwenxin/p/13170353.html
Copyright © 2011-2022 走看看