js 是前端最核心的语言,甚至有外行叫我们’js工程师’
js最厉害的是可以动态的操作html进行增删改查
都是在js基础上增加了很多js的附带方法,把这些附带方法抽象提取出一个门类, 例如:
css3 和css2类似,在c2的基础上添加了一些属性,变的非常强大,自己可以做动画,但是css3最强大的地方是能够和js配合,做一些高难度的东西
html5.0 是在之前html4.01的基础上增加了一些标签,h5的高级功能都是和js语法相关的
jq 是js的封装版本,原来写一个功能用js写20行,jq封装完后1行就够了,是一个简化版工具
zepto也是一个工具
bootstrap 是css3 css的一个简化工具
react、redux 都是基于js开始 模块化编程 ,如何多人协作, 如何效率更高 ,如何更加好维护
node.js 是后端语言, 注意是’.js’,使用的引擎是chrome的v8引擎 和js的语法是一致的,思想不一致,语法一致
js 难度系数是倒序的
1、浏览器组成有两大部分:shell 和 内核部分
shell(翻译过来叫 贝壳),浏览器中用户能看到、能操作的部分叫做shell部分;比如浏览器中的工具栏,状态栏等;
我们看不到的,能够处理代码,并能把代码完整显示处理的部分 叫内核部分;(浏览器的核心是怎么运行的)
中国浏览器不出名就是因为我们没有自己独立的内核
2、内核部分分为2大部分:渲染引擎、js引擎 和其他模块
渲染引擎(渲染也就是绘制,绘制网页是从上到下一层一层绘制,浏览器是一条一条,而且浏览器帧屏是16毫秒切一次-16毫秒闪一次,更新一次状态,我们根本反应不过来)
渲染引擎主要负责html css 基础语法的识别 以及 浏览器如何高效的绘制页面;
js引擎
其他模块:负责异步等等
引擎,类似汽车的发动机,真正让汽车动起来的东西,马达
3、js引擎
2001 ie6问世,首次实现从内核里剥离出了js引擎,拿js引擎单独处理js代码,强大到瞬间让js的执行代码提升到了万行以上,直到现在银行和政府用的还是ie6
因为2001年 除了ie6问世 还有 Microsoft 的XP系统,xp系统的御用浏览器就是ie,因为银行等没还系统 所以用的还是ie
到现在ie浏览器很多版本:7 8 9 10 11 edge
2008年 google 联合apple 开发了一款内核webkit,发布了最新的浏览器chrome
chrome浏览器的内核就是webkit, webkit的js引擎就是v8引擎,(原来js引擎翻译js代码,先从js代码翻译为底层的汇编代码,再翻译成机械码,然后机器才能运行)
该V8引擎能直接把js代码翻译成机械码(010101。。。)来执行,不用经过多次翻译,进而以速度快而闻名
v8 引擎 和 js都是用c语言写的;
后来firefox 也推出了具备强大功能的js引擎
4、js 特点 -重要(解释性语言、单线程)
4.1 js是解释性语言,
我们写的代码,机器不认识,机器只认识010101,所以要经过翻译,翻译的过程分为2种:编译 和 解释;
编译性语言 和 解释性语言 只是因为他翻译的方式不一样:
编译性语言 先 通遍 翻译,翻译完后生产一个翻译文件,最后程序执行这个翻译文件;比如java,把 .java文件翻译成。class文件,最后执行。class文件
解释性语言 读一行 翻译一样 执行一行,然后翻译第二行,一直这样翻译一行执行一行,不生成特定的文件;
优缺点:
编译性语言:快 但是 移植性不好,不跨平台
// c 和c++ 不能跨平台,在windows上编译完的文件(.exe),拿到linux上不能用(.erp),移植性不好;
// 家用版本都是windows,但是服务器多数都是linux 或者 unix 因为他稳定;(由黑客和编程者共同开发的编程系统);
// 服务器 和电脑一样,只不过这个电脑的ip是供大家访问的,通过访问ip 设定一个服务器的功能,把网站推送到大家手里;
// 我们用电脑是索取东西的, 服务器是用来发东西的;我们的电脑也可以当服务器来用,最简单的服务器就是买个机箱;
c c++ 是编译性语言
解释性语言:稍微慢 但好处可以跨平台
解释性语言根本都不翻译成文件,所以不存在跨平台问题。直接是二进制(010101)
凡是脚本带<>的都是解释性语言,php js phython 都是解释性语言
java 都不是这两种语言,是oak语言,Java有个jvm虚拟机, .Java文件 先通过javac 编译成 .class文件, 再通过java虚拟机jvm解释执行
所以jvm虚拟机成全了java,java才能跨平台
4.2单线程(js引擎是单线程的,因为js引擎是执行js的地方)
单线程就是一个执行体同一时间只能做一件事;多线程就是可以同一时间做多件事;
同步和异步:计算机里和生活中不同,同时做多件事叫异步asyc; 先做一件事,停下或完成才能做另一间事是同步;
所以在计算机里,什么是异步的,说明是同时执行的,例如css中的link标签的加载,就是异步的;
//
// 比如浏览器输入网址后访问html页面,html页面是加载一行执行一行,当加载到 link标签那行的时候,执行的结果是加载另一个文件lesson.css
// 这个时候lesson.css 文件是边下载html 边下载html,这种一起的下载 我们叫做异步的加载;
4.3 js的语言标准:ECMA -欧洲计算机联盟
javascript 我们更喜欢叫他ECMAScript(ES),因为标准是ECMA定的;
现在的js 除了有开始的功能(原生的部分叫ecmascript), 后来推出了浏览器提供的DOM部分 和 BOM 部分;
DOM是操作文档的,操作html\css的;BOM是操作浏览器的;
统称js3大部分:ECMAScript 、 DOM 、 BOM
5、js执行队列
js 是单线程(同一时间只能动一个); 但是可以单线程模拟多线程;使用 轮转时间片
轮转时间片类似吃饭,
js引擎要执行task1 和 task2 ,不是把任务1执行完再执行任务2,而是把任务1 和任务2 以微秒或毫秒切成无数个片段,
然后把这无数个片段排成一个队列,谁排前面谁排后面完全随机(这叫做 争抢时间片),可能第一个是任务1,,第二个第三个还是任务1,,都不一定,概率问题
把片段排成队列后,一个片段一个片段的往js引擎里送,js引擎以一个时间片为基准单位去执行时间片段,
最后把任务1 和 任务2 按照片段执行完