Sogo2015前端面试题
1.下列描述错误的是(D)
HTTP状态码302表示暂时性转移
domContentLoaded事件早于onload事件
IE6/7/8不支持事件捕获
localStorage存储的数据,在刷新页面后会消失
HTTP状态码302表示被请求的资源暂时转移(Moved temporatily),然后会给出一个转移后的URL,而浏览器在处理服务器返回的302错误时,原则上会重新建立一个TCP连接,然后再取重定向后的URL的页面;但是如果页面存在于缓存中,则不重新获取;
onload事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了,domContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flash。
web storage有以下几种对象:
sessionStorage:存储特定于某个会话的数据,该数据只保留到浏览器关闭。
globalStorage:目的是跨越会话存储数据,不过要指定哪些域可以访问该数据。如果不使用 removeItem() 或 delete 删除,或者用户未清除浏览器缓存,存储在globalStorage上的数据会一直保留在磁盘上。所以globalStorage非常适合在客户端存储文档或长期保留用户偏好设置。
localStorage:在HTML5中作为持久保持客户端数据的方案取代了globalStorage。它不能被指定访问规则,要访问localStorage,页面必须来自同一个域名,使用同一种协议,在同一个端口上。它的数据也保留到通过JavaScript删除或用户清除浏览器缓存。
2.以下Js程序的输出是什么()
运行如下代码:
依次点击4个li标签,哪一个选项是正确的运行结果()? 4 4 4 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<SCRIPT LANGUAGE= "JavaScript" > var a= "undefined" ; var b= "false" ; var c= "" ; function assert (aVar){ if (aVar) alert( true ); else alert( false ); } assert (a); assert (b); assert (c); </SCRIPT> |
true, true, false, 因为字符串是变量
3.正则表达式/^\d*\*[^\d]*[\w]{6}$/,下面的字符串中哪个能正确匹配?AC
***abcABCD_89
abc*abcABCDEF
123*abcABCD_89
123*ABCabcd-89
/^表示匹配输入字符串开始的位置, \d*表示零次或多次数字, \*是转义字符*,[^\d]*表示 零次或多次非数字,[\w]{6}表示所有字符6次,$/表示匹配输入字符串结尾的位置。
B的*之前一定是数字,排除;
D有连字符-,排除。
A其匹配\d*为零次,再匹配一个*,[^\d]*表示 零次或多次非数字 ,这里匹配**abcA, [\w]{6}匹配 BCD_89;
4.
请问以上程序的输出是()
function Foo(){ var i= 0 ; return function(){ document.write(i++); } } var f1=Foo(), f2=Foo(); f1(); f1(); f2(); |
010
这是一个闭包,闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
这里的局部变量i,对f1()来说是全局变量,对f2()来说也是全局变量,但是f1()的i跟f2()的i又是相互独立相互不可见的,f1()每执行一次,f1()的i就加一,f2()每次执行一次,f2()的i就加油,但是相互之间不影响,因此结果是010
这里的局部变量i,对f1()来说是全局变量,对f2()来说也是全局变量,但是f1()的i跟f2()的i又是相互独立相互不可见的,f1()每执行一次,f1()的i就加一,f2()每次执行一次,f2()的i就加油,但是相互之间不影响,因此结果是010
5.以下哪一个选项是html5的dtd?
<!DOCTYPE html>
6/现有如下html结构
<ul> <li>click me</li> <li>click me</li> <li>click me</li> <li>click me</li> </ul> |
1
2
3
4
5
6
7
|
var elements=document.getElementsByTagName( 'li' ); var length=elements.length; for (var i= 0 ;i<length;i++){ elements[i].onclick=function(){ alert(i); } } |
这里考的是JS的运行机制! 事件(click,focus等等),定时器(setTimeout和setInterval),ajax,都是会触发异步,属于异步任务;js是单线程的,一个时间点只能做一件事,优先处理同步任务; 按照代码从上往下执行,遇到异步,就挂起,放到异步任务里,继续执行同步任务,只有同步任务执行完了,才去看看有没有异步任务,然后再按照顺序执行! 这里for循环是同步任务,onclick是异步任务,所以等for循环执行完了,i变成4了,注意:这里因为i是全局变量,最后一个i++,使得i为4(后面的onclick函数,最后在循环外面执行,不受i<length限制); 所以for循环每执行一次,onclick事件函数都会被挂起一次,共4次; for循环结束后,点击事件 触发了4个onclick函数,接着输出4个4!
7.下面列出的浏览器,无webkit内核的是()D
chrome
Safari
搜狗浏览器
firefox