We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。
对于每个执行上下文,都有三个重要属性:
分析代码:
var scope = "global scope"; function checkscope(){ var scope = "local scope"; function f(){ return scope; } return f(); } checkscope();
执行过程如下:
1.执行全局代码,创建全局执行上下文,全局上下文被压入执行上下文栈
ECStack = [ globalContext ];
2.全局上下文初始化
globalContext = { VO: [global], Scope: [globalContext.VO], this: globalContext.VO }
2.初始化的同时,checkscope 函数被创建,保存作用域链到函数的内部属性[[scope]]
checkscope.[[scope]] = [ globalContext.VO ];
3.执行 checkscope 函数,创建 checkscope 函数执行上下文,checkscope 函数执行上下文被压入执行上下文栈
ECStack = [ checkscopeContext, globalContext ];
4.checkscope 函数执行上下文初始化:
同时 f 函数被创建,保存作用域链到 f 函数的内部属性[[scope]]
checkscopeContext = { AO: { arguments: { length: 0 }, scope: undefined, f: reference to function f(){} }, Scope: [AO, globalContext.VO], this: undefined }
5.执行 f 函数,创建 f 函数执行上下文,f 函数执行上下文被压入执行上下文栈
ECStack = [ fContext, checkscopeContext, globalContext ];
6.f 函数执行上下文初始化, 以下跟第 4 步相同:
fContext = { AO: { arguments: { length: 0 } }, Scope: [AO, checkscopeContext.AO, globalContext.VO], this: undefined }
7.f 函数执行,沿着作用域链查找 scope 值,返回 scope 值
8.f 函数执行完毕,f 函数上下文从执行上下文栈中弹出
9.checkscope 函数执行完毕,checkscope 执行上下文从执行上下文栈中弹出
原文链接:[JavaScript深入之执行上下文](mqyqingfeng/Blog#8)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
JavaScript执行上下文
当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。
对于每个执行上下文,都有三个重要属性:
具体执行分析
分析代码:
执行过程如下:
1.执行全局代码,创建全局执行上下文,全局上下文被压入执行上下文栈
2.全局上下文初始化
2.初始化的同时,checkscope 函数被创建,保存作用域链到函数的内部属性[[scope]]
3.执行 checkscope 函数,创建 checkscope 函数执行上下文,checkscope 函数执行上下文被压入执行上下文栈
4.checkscope 函数执行上下文初始化:
同时 f 函数被创建,保存作用域链到 f 函数的内部属性[[scope]]
5.执行 f 函数,创建 f 函数执行上下文,f 函数执行上下文被压入执行上下文栈
6.f 函数执行上下文初始化, 以下跟第 4 步相同:
7.f 函数执行,沿着作用域链查找 scope 值,返回 scope 值
8.f 函数执行完毕,f 函数上下文从执行上下文栈中弹出
9.checkscope 函数执行完毕,checkscope 执行上下文从执行上下文栈中弹出
原文链接:[JavaScript深入之执行上下文](mqyqingfeng/Blog#8)
The text was updated successfully, but these errors were encountered: