我的世界js运行原理?
首先需要说明的是,我对于JavaScript的理解并不深,只是略懂皮毛而已,所以在这里所说的JavaScript的含义可能会与真正的JavaScript的含义有一定的出入,如果出现了什么错误的话,还请多加包涵。 下面开始回答问题。
问题比较宽泛,因此答案也比较宽泛。我这里所说的JavaScript特指基于ECMAScript规范实现的JavaScript。要了解一种语言的运行原理,最好的办法就是分析其编译成另一种形式后是如何运行的(以JavaScript为例,可以将其编译成Java Byte Code然后再观察其运行)。因此我们要研究的应该就是JavaScript从文本到可执行代码的整个过程。
在计算机中,最常用的数据结构是数组。因此我们不妨假设一个元素为一个对象,这样JavaScript中的所有东西都可以用一个数组来表示。比如一个函数可以被看作是一个函数名和一个函数的参数表(即函数定义时使用的形参列表)组成的一个对象,而一个函数调用的过程也就是这个函数名以及形参列表的组合。同理,一个变量也可以看成是一个标识和值组成的对象,而赋值的过程其实就是将值的拷贝放到标识所指向的位置的过程。
为了研究方便,我们可以把整个内存空间抽象成一个大型的数组,这个数组的每个下标代表一个地址,而这个地址又可以通过地址计算找到对应的基本类型的数据或者对象的起始位置。基本类型的数值按照Java虚拟机的规定放在一起,不同平台可能有所不同但大体一样。在基本类型中,有两种特殊的类型,即boolean型和char型,前者只有一个常数是true,后者只有两个常数分别是'\0'和'\1'。这两种类型占用的时间短而且存储的位数少,因此经常被用来表示条件或者字符串结束的地方。
当我们输入一段代码并按下回车键之后,JavaScript引擎就会将这段代码进行解析,然后转换为执行顺序和调用栈等信息,最后提交给C语言的执行引擎去实际执行。在执行的过程中,变量、函数等对象的存储和检索都要依靠内存中的数组来完成。当遇到一条语句包含多个表达式的时候,这些表达式的值都会存在上述的变量对象中并且按照运算的顺序放在对象的属性上。也就是说,只要知道了一个变量对象的存放位置就能顺着变量对象中的一系列属性找到这个变量的值。