HTML与XHTML------- 二者有什么区别
- 所有标记都必须要有一个相应的结束标记
- 所有标签的元素和属性的名字都必须使用小写
- 所有的XML标记必须合理嵌套
- 所有的属性必须使用引号
""
括起来 - 把所有的
<
和&
特殊符号用编码表示 - 给所有属性附一个值
- 不要再注释内容中使用
-
- 图片必须有说明文字
html5有哪些新特性
- 语义化更好的内容标签
header
,nav
,footer
,aside
,section
- 音频、视频API
audio
,video
- 画布API
canvas
- 地理API
geolocation
- 拖拽缩放API
Drag and drop
- 本地离线存储
localStorage
- 表单控件
calendar
,date
,time
,email
,url
,search
一个页面从输入URL到页面加载显示完成,这个过程中都发生了什么
- 浏览器根据请求的URL交给DNS域名解析,找到真实IP,向服务器发起请求(TCP三次握手);
- 服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、js、css、图像等);
- 浏览器对加载到的资源(HTML、js、css等)进行语法解析,建立相应的内部数据结构(如HTML的�DOM);
- 载入解析到的资源文件,渲染页面,完成。
浏览器的渲染过程
- 浏览器请求到HTML代码后,在生成DOM的最开始阶段,并行发起CSS、图片、js的请求,无论他们是否在header里。浏览器会将HTML解析成一个DOM树,DOM树的构建过程是一个深度遍历过程:当前节点的所有子节点都构建好后才回去构建当前节点的下一个兄弟节点;
- css文件下载完成,开始构建CSSOM;
- 所有css�文件下载完成,CSSOM构建结束后,和DOM一起生成Render Tree;
- 有了render tree,浏览器已经能知道网页中有哪些节点,各个节点的css定义以及他们的从属关系,下一步操作就是计算出每个节点在屏幕中的位置。
- 最后一步,按照算出来的规则,把内容渲染到屏幕上。
以上五个步骤的前三步因为DOM、CSSOM、render tree都可能在第一次Painting后又被更新多次,比如js修改了DOM或者CSS属性,Layout和Painting也会被重复执行,除了DOM、CSSOM更新的原因外,图片下载完成后也需要调用Layout和Painting来更新网页。
display:none;
的节点不会被加入Render Tree,而visibility:hidden;
则会。如果某个节点最开始是不显示的,设为�display:none;
是最优的。
闭包
第一种理解(红宝书):闭包是指有权访问另一个函数作用域中的变量的函数,创造闭包最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。
第二种理解(你不知道的JavaScript):当函数可以记住并访问所在的词法作用域时,就产生了闭包,这个函数持有对该词法作用域的引用,这个引用就叫做闭包。
闭包本质还是函数,只不过这个函数绑定了上下文环境(函数内部引用的所有变量)
缺点: 常驻内存,会增大内存使用量,使用不当很容易造成内存泄漏。
作用(使用场景):可以用来管理私有变量和私有方法,将对变量(状态)的变化封装在安全的环境中,使得这些变量不能被外部随意修改,同时又可以通过指定的函数借口来操作。
闭包有三个特性:
- 函数嵌套函数
- 函数内部可以应用外部的参数和变量
- 参数和变量不会被垃圾回收机制回收
�##### new操作符具体干了什么呢
- 创建一个新对象
- 将构造函数的作用域赋给新对象(因此this就指向了这个新对象)
- 执行构造函数中的代码(为这个新对象添加属性)
- 返回新对象
call、apply、bind的区别
- 三者都是用来改变函数的this对象的指向的
- 三者第一个参数都是this要指向的对象,也就是想指定的上下文
- call传入的参数数量不固定,第二部分参数要一个一个传,用
,
隔开 - apply接受两个参数,第二个参数为一个带下标的集合,可以为数组,也可以为类数组。
- bind是返回一个改变了上下文的函数副本,便于稍后调用,apply、call则是立即调用。
线程和进程的区别
- 一个程序至少有一个进程,一个进程至少有一个线程
- 线程的划分尺度小于进程,使得多线程程度的并发性高
- 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
- 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
- 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行,但操作系统并没有将多个线程看成多个独立应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。�
网友评论