JS 变量提升、执行上下文、作用域链

一、执行上下文(execute context)EC
理解:代码的执行环境
时机:代码正式执行之前会进入到执行环境,代码执行结束销毁
工作:
      1.创建变量对象
          (1)变量
          (2)函数及函数的参数
          (3)全局:window
            (4) 局部:抽象的但是确实存在
      2.确认this指向
          (1)全局:this ---> window
            (2) 局部:this----> 调用其的对象
      3.创建作用域链
            当前变量对象+父级作用域链+。。。
      4.扩展:
         ECObj = {
            变量对象:{变量,函数,函数的形参},
            scopechain:父级作用域链 + 当前的变量对象,
            this:{window || 调用其的对象}
         }
二、 作用域链:上下文中代码执行时会创建变量对象的一个作用域链。
                作用域链决定者各级上下文中代码访问变量和函数的顺序。
                代码正在执行的上下文的变量对象始终位于作用域链的最前端。
                   作用域链的下一个变量对象来自包含上下文,再下一个变量对象来自下一个包含上下文。
                以此类推直至全局上下文,全局上下文的变量对象始终是作用域链的最后一个变量对象。
        作用域链增强:执行上下文主要有全局上下文和函数上下文两种(eval()调用内部存在第三种上下文),
                         但有其他方式来增强作用域链。某些语句会导致在作用域链前端临时添加一个上下文,
                            这个上下文在代码执行后会被删除 。
                        (1)try/catch语句的catch块
                          (2)with语句
posted @ 2022-02-26 09:56  xuncheng1932  阅读(57)  评论(0编辑  收藏  举报