概述
JS是脚本语言,但它也会经过编译,编译就发生在代码执行前的极短时间内(微妙级甚至更短)
编译器进行代码生成时,会创建执行上下文。
执行上下文
有三处代码可以创建执行上下文
- 全局代码:执行全局代码会创建全局执行上下文,有且只有一个全局执行上下文
- 函数:执行函数会创建函数执行上下文
- eval()函数:执行eval()函数会创建Eval函数执行上下文
执行上下文栈
这些上下文构成一个执行上下文栈,新的上下文会添加到栈的顶部,执行完则出栈,直到再次到达全局执行上下文。
创建执行上下文的过程
每个执行上下文有三个重要属性:变量对象(Variable Object),作用域链(Scope chain)和this
executionContextObj = {
// 变量对象
'variableObject': { /* function arguments / parameters, inner variable and function declarations */ },
// 作用域链
'scopeChain': { /* variableObject + all parent execution context's variableObject */ },
'this': {}
}
复制代码
其创建过程如下
1)创建变量对象
- 创建 arguments 对象:创建 arguments 对象,该对象中包含实参,此过程仅在函数(非箭头函数)中进行。
- 函数声明提升:每发现一个函数声明,在变量对象中创建与函数名相同的属性,值是指向这个函数的指针,如果这个函数名已存在,则重写这个指针的值。
- 变量声明提升:每发现一个变量声明,在变量对象中创建与变量名相同的属性,值初始化为undefined,如果变量名已存在,则什么也不做。
2)建立作用域链
作用域就是上面的变量对象,作用域链就是由当前执行上下文的变量对象与所有上层执行上下文的变量对象组成的带头结点的单向链表。
3)确定this的指向
执行
执行过程中最重要的就是事件循环。
最后
欢迎关注我的微博@狂刀二
最后
以上就是顺利香水为你收集整理的JS的执行过程的全部内容,希望文章能够帮你解决JS的执行过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复