Javascript - 执行上下文

概念

一、执行上下文: (Execution Context,缩写 EC)

    console.log('EC0');    function funcEC1(){        console.log('EC1');        function funcEC2(){            console.log('EC2');            var funcEC3 = function(){                console.log('EC3');            };        }        funcEC2();    }    funcEC1();

在Javascript引擎解析上述代码时在执行函数会依次将其添加到栈(Stack)中,即(ECO(Global),EC1,EC2),如下图所示:

执行上下文分为:全局执行上下文和函数执行上下文

二、变量对象:(Variable Object VO)

是一个抽象的概念中的‘对象’,它用于存储执行上下文中的:

  1. 变量

  2. 函数声明

  3. 函数参数

var a = 10;    function test(x){        var b = 20;    }    test(30);

Javascript引擎会将其解析为:

 VO(globalContext) = {        a: 10,        test:     };    VO(test functionContext){        x:30,        b:20    };

在浏览器中全局上下文变量对象为window,而在nodejs中全局上下文变量对象为global。
当js代码运行前,在全局执行上下文中(浏览器)中就会默认添加一些变量,
如:Math,String,isNaN,window,所以在调用代码时:

String(10);             //[[global]].String(10)window.a = 10;         //[[global]].window.a = 10this.b = 20;             //[[global]].b = 20

三、函数中的激活对象:(Active Object AO)

与变量对象一样,即(VO(functionContext) === AO);
只不过AO多了一个变量,为arguments:

 arguments = {        callee,        length,        properties-indexes    };

这个可选择性忽略,没什么用.

函数调用中的执行上下文

代码如下:

    function test(a, b){        var c = 10;        function d(){}        var e = function _e(){};        (function(){})();        b = 20;    }    test(10);

关键字:JavaScript, 上下文, function, 变量

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部