JavaScript(通常缩写为JS)是一种解释性脚本语言(代码不进行预编译),主要用来向HTML页面添加交互行为。它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。
1995年,Brendan Eich进入网景公司,在公司"看上去与Java足够相似",但是比Java简单,使得非专业的网页作者也能很快上手”的要求下,用10天确定了设计思路并为其浏览器开发了js功能,以下为设计思路:
(1)借鉴C语言的基本语法;
(2)借鉴Java语言的数据类型和内存管理;
(3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
(4)借鉴Self语言,使用基于原型(prototype)的继承机制。
值得一提的是,Brendan本人并不喜欢自己的这个作品,虽然当时很多人都十分喜欢Java语言,但Brendan却不是其中一员,因此即使JavaScript在后来成为互联网第一大语言,全世界有几百万学习者,但Brendan仍然不喜这个以Java为设计原型的作品,他将其称为“C语言和Self语言一夜情的产物”。
标记清理
*JavaScript最常用的垃圾回收策略时标记清理。当变量进入上下文,比如在函数内部声明一个变量时,这个变量会被加上存在上下文中的标记。而上下文中的变量,逻辑上讲,永远不应该释放他们的内存,因为只要上下文中的代码在运行,就有可能用到他们。当变量离开上下文时,也会被加上离开上下文的标记。
给变量加标记的方式有很多。比如:当变量进入上下文时,反转某一位;或者可以维护”上下文中“和”不在上下文中“两个变量列表,可以把变量从一个列表转移到另一个列表。标记过程的实现并不重要,关键是策略。
垃圾回收程序运行的时候,会标记内存中的存储的所有变量(记住,标记方法有很多种)。然后,它会将所有在上下文中的变量,以及被在上下文的变量引用的变量的标记去掉。在此之后在被加上标记的变量就是待删除的了,原因是任何在上下文中的变量都访问不到他们了。随后垃圾回收程序做一次内存清理,销毁带标记的所有值并收回他们的内存!*