大家好,小编来为大家解答以下问题,javascript怎么运行代码,javascript怎么运行程序,今天让我们一起来看看吧!
- 我们在学习前端的知识时,必定会学习我们的JavaScript的内容,那么JavaScript是如何执行的呢?
- 假如我们有以下的执行代码,那么代码是如何执行的呢
var name = 'why'; var num1 = 20; var num2 = 30; var result = num1+num2; console.log(result);
- 那么我们接下来探讨一下JavaScript代码的执行过程。
一、初始化全局对象
- Js引擎会在执行代码之前,在堆内存中创建一个全局对象:Global Object(我们简称Go).
该对象所有的作用域都可以访问;
里面会包含Date、Array、String、Number、setTimeout、setInterval等等;
其中里面还有一个window属性指向自己- 以下是:Global Object对象的伪代码
var globalObject = { String : '类', Date : '类', setTimeount : '函数',(等等) window : globalObject, }
二、执行上下文栈
- 什么是js的执行上下文栈(Excution Context Stack =>ECS)?
简单来说js的执行上下文栈就是解析和运行js代码的一个调用栈,我们所有的js代码经过解析之后都会在这个执行上下文栈(即调用栈)中执行GPT改写。- 执行上下文栈中包含着两种执行上下文:
(1).Global Excution Context 全局执行上下文(GEC)--->全局代码块为了执行会构建GEC.
(2).Function Ecution Context 函数执行上下文(FEC)--->执行函数会构建FEC.
注意:以上两者都会被放在Excution Context Stack(ECS)中执行.- 执行上下文栈和全局执行上下文的关系:
(1).在代码执行前,在parse转成AST的过程中,会将全局定义的变量、函数等加入到Global Object中,但是并不会赋值,此时的值为undefined,这个过程也称为变量作用域的提升.
(2).在代码执行中,对变量赋值或者执行其他函数.- 执行上下文栈和函数执行上下文的关系:
(1).在执行代码的过程中执行到一个函数时,就会根据函数体创建一个函数执行上下文(Function Excution Context,简称FEC),并压入执行上下文栈中(ECS).
(2).FEC中包含三部分内容:
<1>第一部分:在解析函数成为AST树结构时,会创建一个Activation Object(AO):AO中包含形参、arguments、函数定义和指向函数的对象、定义的变量;
<2>第二部分:作用域链:由VO(在函数中就是AO对象)和父级VO组成,查找时会一层层查找;
<3>第三部分:this绑定的值。
Function Exection Context VO:形参/arguments/function/变量 Scope Chain(作用域链):VO/Parent VO thisValue:根据不同的情况绑定this
三、简单变量的执行
四、函数的执行
五、总结
要掌握好JavaScript的执行过程,首先要清楚代码是在执行上下文栈中执行的,其次掌握好作用域的提升和JavaScript在v8引擎中的解析过程。以上是个人的学习心得,如有误导麻烦大佬们指点啦!!!