1.一分钟自我介绍,两个公司的题目有一定程度的重合,例如事件的委托代理,原型链等。
2.jquery中事件绑定与事件代理怎么写,要写出来哦,给所有li加点击事件利用事件代理怎么写?
事件绑定的方法主要有bind(),live(),on(),推荐使用on()
事件委托的方法主要有delegate(),
$('ul').delegate('li',click,fun)
3.HTML5中的缓存机制,说出其优缺点?
HTML5出来之前,通常使用cookie来存储用户数据,cookie只能存储4K左右的数据,且不同浏览器的cookie数量都是有限的。cookie在每次请求时都会随http传输到服务器,让服务器知道请求是否来自同一个客户端。
HTML5缓存技术主要分为两类,本地缓存技术与离线缓存技术。
本地缓存技术主要有sessionStorage和localStorage,它们都是客户端存储技术。localStorage存储的数据,只要用户没有手动清理,就一直存在,同一浏览器之间localStorage可以实现共享。sessionStorage时会话级别的存储技术,浏览器关闭,客服端存储的数据自动销毁。
离线缓存技术主要通过创建cache manifest文件来对web应用的静态页面进行缓存,让web应用在没有网络的情况下也可以正常使用。但是只限于页面展示,对于页面中的实时数据还是需要利用网络才能访问。主要完成需要两步:
1)服务器端创建mainfest文件,主要声明语句有cache mainfest ,cache,network,fallback。
2)mainfest文件创建正确的MIME-TYPE:text/cache-manifest。
4.typeof,instanceof的作用是什么?
typeof的作用是判断变量的数据类型;
instanceof的作用是判断左边对象是否为右边构造函数的实例。
5.数组常用的方法有哪些?遍历用哪个?
参考阮老师的教程即可。
6.怎样判断一个对象的方法是自己定义的方法而不是继承而来?
.hasOwnPropertyOf()返回true,表示为对象自身定义的方法,false表示继承而来的方法。
7.协商缓存了解吗?讲一下
浏览器缓存是指浏览器在本地磁盘对用户最近访问过的页面进行存储,当用户再次访问刚页面时,浏览器就可以直接从本地磁盘加载文档。
浏览器在请求某一资源时,首先会获取该资源的缓存的header信息,利用cache-control或Expires判断是否命中强缓存,cache-control与Expires同时存在的话,cache-control的优先级高于Expires,cache-control中存储的是相对时间,Expires中存储的是绝对时间,若命中直接从缓存中获取资源信息,包括缓存header信息,本次请求不会和服务器进行通信,返回200;
如果没有命中强缓存,浏览器会启用协商缓存,首先检查缓存header信息中是否包含Etag,若存在则再发送请求时携带If-Not-Match:Etag,Etag是当前资源在服务器端的唯一标识,若Etag未发生变化,返回304和Etag的值,由于Etag的值重新生成过,即时和之前的相同,也会返回;上次请求之后请求头还会存在last-Modified值,在未命中强缓存时,像服务器发送http请求时会携带If-Modified-Since,该字段的值为缓存头中的Last-Modified的值,服务器拿到该字段时会和服务器上该资源最近一次被修改的时间进行比较,若If-Modified-Since的值晚于服务上该资源最近修改时间,则认为资源没有变动,返回304;
Last-Modified与Etag可以一起使用,同时存在时会优先验证Etag,Etag一致的时候,才会对比Last-Modified,最后才决定是否返回304。
Etag出现在http1.1中,Last-Modified出现在http1.0,Etag出现的主要目的是为解决一下几个难题:
一些文件也许会周期性的修改,有可能内容并未修改,只是改写了修改时间;其次,服务器有可能并不能获取到文件的准确修改时间。
8.id选择权,类选择器,伪类选择器,标签选择器优先级说一下?
id > class = 伪类 > 标签
9.js中this指向是定义时决定还是运行时决定?
this的指向实在程序实际运行时确定的,this的最终指向是那个最终调用它的对象。
10.隐藏元素不删除解构用什么?
visibility:hidden
11.http状态码说一下?
200;301(永久重定向);302(暂时重定向);304(请求资源未修改,取缓存内容);
400(客户端请求语法错误,服务器无法理解);404(服务器无法根据客户端的请求获取资源);
500(服务器内部错误,无法完成请求)
12.封装一个ajax,讲一下ajax的作用?
ajax是与服务器交换数据的方式,它在不重载全部页面的情况下,实现了对网页的部分刷新。
ajax的实现基于XMLHttpRequest对象,onreadystatechange用于监听事件,readyState代表请求的变化(0,1,2,3,4),status代表http请求的状态码。
jquery中封装了ajax的方法有$.get(),$.post(),$.ajax();三者的区别在于$.ajax()方法可以进行多种状态事件。
13.行内元素可以设宽吗?可以设padding和margin吗?
行内元素在一条直线上排列,默认宽度只与内容有关,在同一行水平排列;
行内元素设置宽高无用,设置margin上下及padding上下无效。
块内元素各占一行,默认宽度是它本身父容器的100%,垂直方向排列,块级元素从新行开始,结束接着一个断行。
14.闭包相关
闭包的理解:闭包就是可以创建一个独立的环境,每个闭包里面的环境都是独立的,互不干扰;
闭包的创建:在一个函数中嵌套另外一个函数,将被嵌套的函数return出去,将return出的函数保存在一个变量中,就创建了一个闭包。
闭包的作用:在函数外部访问到函数的内部变量;使一个函数长久的存在于内存当中。
15.有关匿名函数
匿名函数无法直接使用;
匿名函数可以依附于一个变量,并且这个变量名就是匿名函数的名字;
匿名函数在绑定事件中的时候,当这个事件执行的时候这个匿名函数就会被执行;
如果将匿名函数放入到函数表达式中并且后面加上小括号会自动执行这个函数;
匿名函数不能加括号自动执行,除非依附于变量或者函数表达式;
16.js中的回收机制
js中定义的全局变量不会被销毁;
函数中定义的变量的生命周期在执行完这个函数之后就销毁,但是有时候需要用到函数执行结束之后的变量值,因此js需要判断是否要保存上次执行结束后的变量值,当函数中的变量存在外部引用时,这个值就不会被销毁,这也是闭包可以访问函数内部变量的原因;
总结:如果一个对象不被引用,那么这个对象就会被回收;
如果两个对象相互引用,但没有被第三个对象所引用,那么这两个相互引用的对象也会被回收。
17.js中的静态属性与原型属性
实例对象不能调用静态属性,但是可以调用原型属性,当前实例对象上若不存在某一属性,会在它的原型属性上去查找;
实例对象的私有属性>this上定义的属性>prototype上的属性
18.callee与caller
callee的意义在于使用匿名函数时可以调用函数本身arguments.callee();
coller()的作用在于能够知道函数的调用者是谁。
19.数组去重的方法?
双重循环判断;
利用Set对象,Set中的值是不能重复的;
利用对象key/value,一个对象不能有多个同名属性,如果相同最后一个会覆盖前边的一个。
20.怎样判断一个方法是对象自身的,而不是从原型链上继承的?
利用hasOwnProperty()方法,返回true表示对象自身定义的方法,false为原型链上的方法。
21.for in与for of的区别?
for in的使用方法为let key in obj;for of的使用方法为let key of Object.keys(obj);for in遍历时不会过滤对象的原型属性;for of方法会过滤原型属性。