JavaScript运行环境、运行机制与运行过程

一、运行环境

JavaScript是伴随着浏览器的诞生而诞生,所以JavaScript的执行最多还是在浏览器环境之内。但是JavaScript作为服务端脚本的概念在诞生之初就有,1995年网景公司就提出了服务端JavaScript的概念,并研发了 Netscape Enterprise Server;1996年微软发布的JScript也可以运行在服务端。随着技术的发展各种JavaScript引擎出现,2009年5月Node.js的发布将JavaScript作为服务端脚本推向了一个高潮。关于JavaScript服务端的实现可以参看wikipedia,https://en.wikipedia.org/wiki/List_of_server-side_JavaScript_implementations。

JavaScript的运行不像C语言等其他编译型语言编译后直接在操作系统上运行,因为它是脚本语言,运行时必须要借助引擎(解释器)来运行,所以它可以在封装了引擎的环境下运行。封装了JavaScript引擎的环境可以分为两类,一类是浏览器环境;一类是非浏览器环境,比如Node.js、MongoDB。我没有采用wikipedia中clent-side和server-side的直接翻译,因为JavaScript既可以编写服务端脚本也可以编写shell脚本,甚至图形界面应用程序。

把运行环境分为浏览器环境和非浏览器环境是因为他们提供了截然不同的操作模块。浏览器环境下JavaScript由三部分组成,分别是ECMAScript、DOM和BOM,BOM和DOM是针对浏览器环境所扩展的操作方法。非浏览器环境,比如Node.js,也是以ECMAScript为基础,扩展出了I/O操作、文件操作、数据库操作等等;在MongoDB中则是可以作为shell脚本操作数据库;在Eclipse e4中可以编写扩展。

二、运行机制

了解了JavaScript的运行环境,我们来看看运行机制。这里我们不再谈微软的JScript,一方面写本文时我没有找到详尽的介绍JScript的资料,另一方面JScript的应用现在不常见。

JavaScript是个什么样子,取决于它初始应用于哪里,它是作为浏览器的脚本出现,主要用途是解决网页中的用户交互。页面中的用户交互行为会让页面中的DOM元素产生变化,比如用户输入信息后的反馈提示等等。JavaScript在浏览器环境中操作DOM,为避免复杂的同步问题,决定了它采用单线程。如果同时有多个线程,有的在DOM节点上添加内容,有的修改了整个节点,甚至有的删除了整个节点,这个时候很难判断到底采用哪个线程的结果。

JavaScript最大的特点就是单线程,在浏览器环境中中是,在非浏览器环境中同样也是。单线程也就意味着JavaScript在同一时间只能进行一项任务,如果有多项任务的话,需要对任务进行排队,完成一个才能继续下一个。

不同的浏览器、不同的引擎、不同的执行环境,执行JavaScript的细节会有差异,但是不变的是单线程和队列。

三、运行过程

在浏览器环境中,JavaScript引擎按

你可能感兴趣的:(JAVASCRIPT基础,JavaScript常见面试题)