美文网首页
JavaScript上下文

JavaScript上下文

作者: Evangelist | 来源:发表于2017-10-25 11:46 被阅读0次

JavaScript中有三种运行环境

全局环境:JavaScript最开始运行的默认环境

函数环境:函数执行时,函数内的环境

Eval环境:eval()运行环境,不建议使用

JavaScript引擎遇到可执行的程序(以函数为例),会为这段程序创建一个执行上下文Execution context,EC),执行上下文暂时理解为当前程序的执行环境。每遇到不同的程序(函数),就会为该程序创建一个执行上下文。这些执行上下文就构成一个执行上下文栈(Execution context stack,ECS)。

例1:

var a = "globalVar";

function outerFunc(){

var b = "outerVar";

function innerFunc(){

var c = "innerVar";

}

innerFunc();

}

outerFunc()

程序执行先进入GlobalEC,GlobalEC入栈;然后进入outerFuncEC,outerFuncEC入栈;最后进入innerFuncEC,innerFuncEC入栈。然后程序执行,innerFunc执行完,innerFuncEC出栈;outerFunc执行完,outerFuncEC出栈;程序执行完,GlobalEC出栈。

每一段程序的执行可以分为两个阶段,执行上下文阶段和程序执行阶段。

执行上下文:又叫做程序准备阶段,该阶段创建变量对象、建立作用域链、确定This指向三件事。

程序执行:执行代码,参数赋值,函数引用,变量赋值等。

变量对象

变量对象是和上下文相关的特殊对象,存储着上下文中的相关数据,以属性/值的方式存储三类数据:

参数对象声明:即arguments对象;参数名作为参数对象属性,属性值默认为undefined。

函数声明:函数名作为属性,函数引用作为属性值;若存在同名属性,覆盖原属性值。

变量声明:变量名作为属性,undefined作为属性值;若存在同名属性(参数属性或者函数属性),不影响原属性值。

变量对象是在执行上下文阶段创建的,将上下文中的相关数据(参数、函数、变量)以一定的规则提升到函数内顶级范围并赋值为默认值,这也就是为什么会存在“变量提升”的概念。

例2:

alert(x); //function

var x=10;

alert(x); //10

x=20;

function x(){};

alert(x); //20

程序进入执行上下文阶段:创建VO,因为变量和函数名一样,保持函数名,即VO只有一个属性:VO = {x:< x reference >},该阶段结束。程序进入执行阶段:第一个alert弹出“function x(){}”,因为x默认为函数x;第二个alert弹出“10”,因为在程序执行阶段对x的值进行了修改(这里明确一点:执行上下文阶段 和 程序执行阶段是两个独立的阶段,虽然都是同一个对象(VO  >  AO),执行阶段仍然会修改对象的值),同样,第三个alert弹出“20”。

例3:

if(true){

var a=1;

}else{

var b=2;

}

alert(a); //1

alert(b); //undefined

例4:

alert(a); //undefined

alert(b); //error:"b"没有定义

b = 10;

var a = 20;

相关文章

  • 执行上下文

    深入理解JavaScript执行上下文、函数堆栈、提升的概念 解密 JavaScript 执行上下文

  • 精品技术贴汇总

    about 执行上下文 深入理解JavaScript执行上下文、函数堆栈、提升的概念 JavaScript深入之变...

  • 2020年前端面试复习必读文章

    1. JavaScript 基础 1.1 执行上下文/作用域链/闭包 理解 JavaScript 中的执行上下文和...

  • JavaScript 执行

    JavaScript 执行 一段 JavaScript 经过编译会生成两部分:执行上下文,可执行代码。在执行上下文...

  • js深度剖析 : 执行环境和作用域链

    执行上下文 execution context 又称执行上下文或者执行环境. 执行上下文是JavaScript中一...

  • Javascript this全攻略

    Javascript this 在JavaScript中, this 是当前执行函数的上下文。 JavaScri...

  • 编写高效的javascript

    读书笔记 1.当执行javascript代码时,javascript引擎会创建一个执行上下文。执行上下文设定了代码...

  • 深入浅出执行上下文、词法环境、变量环境

    执行上下文的概念 执行上下文:javascript 代码解析和执行时所在的环境。 执行上下文的类型 执行上下文分为...

  • call()与apply()的区别

    JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」 call(),app...

  • call apply caller callee

    call JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。...

网友评论

      本文标题:JavaScript上下文

      本文链接:https://www.haomeiwen.com/subject/bihqpxtx.html