JS的历史
年份 | 1996 |
---|---|
作者 | Brendan Eich(布兰登·艾奇) |
处名 | LiveScript |
目的 | 改善网页的用户体验 |
版权 | Oracle(卖数据库的) |
分界线 | 2001年IE6问世。首次从内核中分离出JS引擎。(之前的渲染引擎处理js,很低效支持很不好,几乎不能写js) IE6配合XP浏览器,成为了老系统的御用浏览器。 翻译过程:js代码 -> c -> 汇编代码 -> 机械码 |
V8引擎 | 2008年Google+apple发布Chrome,webkit内核,内置V8引擎。(V8火箭) 将js代码直接转为0101的机械码执行,最大的特点是执行速度快。 |
特点 | - 解释性语言 - 单线程 |
ECMA标准 | 起初,微软JScript、CEnvi的ScriptEase,于JavaScript并列,都可以浏览器运行。但是三者文档参差不齐。 ECMA联盟统一了他们的规范和文档。但是统一后对前两者不友好,活不下去都死了,只剩下js了。 因为标准是ECMA定的,所以又叫ECMAScript |
js执行队列 | 轮转时间片 — 实现“单线程模拟多线程”的效果 |
周边
线程
单线程
一个人同一时间只能干一件事。【叫做同步】
- 编译
- 解释
因翻译性质不同,出现两种语言:
1、编译性语言
- 翻译过程是通篇翻译并生成翻译文件、程序最终执行该文件
- 代表语言:C、C++
- 优点:执行快
- 不足:跨平台性不好(c和c++需要针对win和linux编译出来对应的文件)又叫移植性不好
2、解释性语言
- JavaScript又叫动态语言(动态语言基本都是解释性语言、解释性语言大部分都是脚本语言)
分类 | 编译性语言 | 解释性语言 |
---|---|---|
翻译过程 | 是通篇翻译并生成翻译文件、程序最终执行该文件 | 翻译过程是看一行翻译一行、不报错翻译下一行,以此类推 |
特点 | 静态语言,定义变量的同时要定义数据类型。 | 带尖角号的都叫解释性语言 声明变量的关键字就一个(var/let/const,之所以演变出三个,也是因为要创建的变量作用域不同,而不是为了区分变量的数据类型。不用通篇编译、解释一行执行一行。) |
代表语言 | C、C++、R语言、Ruby | js、python、php |
优点 | 执行快 | 不用翻译成文件,跨平台。 |
不足 | 跨平台性不好(c和c++需要针对win和linux编译出来对应的文件)又叫移植性不好 | 执行偏慢(因翻译一行、执行一行) |
*Java不是以上两种语言,java是oak语言
翻译过程:.java文件 -> javac指令 -> 编译 ->.class文件 -> jvm虚拟机 -> 7都能解释执行(因为jvm成全了java的跨平台性。BB机也能用java)
轮转时间片
例子:
闪电侠的逆闪,一微秒左边,一微秒右边。速度足够快,视觉分辨不出来,看上去就有俩人。
比如:
两个任务都要执行,按照单线程的逻辑,一次只能执行一个任务。
但要两个任务同时执行(比如两个定时器)那就把这两个任务切成很多小段。打乱顺序依次排队推进Js执行主线程,(顺序打乱谁排前后不一定,叫做争抢时间片)。JS引擎以一个时间片为基准单位去执行时间片段。最终两个任务按照时间片段看上去同时执行完。模拟出多线程的效果。
轮转时间片 - 是计算机操作系统的基础知识