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)
是一个抽象的概念中的‘对象’,它用于存储执行上下文中的:
变量
函数声明
函数参数
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, 变量
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!