执行上下文环境—JavaScript面向对象高级

Posted 唐小青

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行上下文环境—JavaScript面向对象高级相关的知识,希望对你有一定的参考价值。

#  执行上下文环境 #

 **定义**:执行函数的时候,会产生一个上下文的对象,里面保存变量,函数声明和this。

 **作用**:用来保存本次运行时所需要的数据

 在产生执行上下文(执行上下文环境)时,浏览器会做以下三个准备工作:
 
      1.提取var 声明的变量,并赋值为 undefined
      2.提取声明式函数。
      3.给this赋值,指向window或当前对象。

         函数每执行一次都会产生一个执行上下文,
         因为函数参数不同会有不同的计算结果,
         
  ## 全局上下文环境 ##

   全局级别的代码,如多个script标签,一旦执行就会进入全局执行上下文环境
  
         1.提取普通变量,如 var a  ,并赋值 a = undefined
         2.提取声明式函数,function fn(){}
         3.给 this 赋值,this指向window

  ## 局部上下文环境   ##
  
   在函数调用的时候产生,每一次调用就会产生,调用完成后销毁(除闭包)。
      
      1.提取普通变量,如 var a  ,并赋值 a = undefined
      2.提取声明式函数,function fn(){}
      3.给 this 赋值,this指向当前对象
      4.给参数赋值
      5.给arguments 赋值
      6.自由变量的取值作用域,查找并赋值
  
      自由变量:在当前作用域中未声明的变量,会去其上一级查找,直到window
      arguments:是一个实参副本,与实参保持一致。
 

 ## 执行上下文栈 ## 

   **压栈 和 出栈**
   
       压栈:函数未调用时只有全局上下文在执行,每次调用函数时会产生局部上下文,这就是压栈,也就是进栈。
    
       出栈:函数调用完成后,就会出栈,会销毁本次调用的局部上下文环境

  注意:若函数里面是多层函数嵌套,也会出现多层执行上下文的嵌套
       压栈和出栈也是嵌套产生的 

      



















































以上是关于执行上下文环境—JavaScript面向对象高级的主要内容,如果未能解决你的问题,请参考以下文章

javascript 执行环境,变量对象,作用域链

JavaScript高级 面向对象(13)--构造函数的执行过程

JavaScript中高级进阶推荐一个JavaScript进阶深入系列专题系列(涉及原型作用域执行上下文变量对象this闭包按值传递callapplybindnew继承等

JS执行上下文(执行环境)详细图解

《JavaScript 高级程序设计》总计四

JavaScript高级 面向对象(12)--引用类型值类型作为参数传递的特性