搜狗2015前端工程师笔试题
- 1.选项的分析。
HTTP状态码302表示被请求的资源暂时转移(Moved temporatily),然后会给出一个转移后的URL,而浏览器在处理服务器返回的302错误时,原则上会重新建立一个TCP连接,然后再取重定向后的URL的页面;但是如果页面存在于缓存中,则不重新获取;
onload事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了,domContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flash。
IE6/7/8不支持事件捕获。
Localstorage是html5存储数据的方式,在HTML5中,本地存储是一个window的属性,包括localStorage和sessionStorage。HTML5本地存储只能存字符串,任何格式存储的时候都会被自动转为字符串,所以读取的时候,需要自己进行类型的转换。是永久性存储,当然用户可以通过浏览器设置来删除。
- 2.正则表达式
/^\d*\*[^\d]*[\w]{6}$/
,下面的字符串中哪个能正确匹配?
/^
表示匹配输入字符串开始的位置;
\d*
表示零次或多次数字;
\*
是转义字符*;
[^\d]*
表示 零次或多次非数字;
[\w]{6}
表示所有字符6次;
$/
表示匹配输入字符串结尾的位置;
\w
匹配字母或数字或下划线或汉字;
//解析
***abcABCD_89 //匹配
abc*abcABCDEF //不匹配,*前必为数字
123*abcABCD_89 //匹配
123*ABCabcd-89 //不匹配,后面有连字符
- 3.请问以下程序的输出是?
示例
function Foo(){
var i=0;
return function(){
document.write(i++);
}
}
var f1=Foo(),
f2=Foo();
f1();
f1();
f2();
解析:
这是一个闭包,闭包可以用在许多地方。
它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
这里的局部变量 i,对 f1() 来说是全局变量,对 f2() 来说也是全局变量,但是 f1() 的 i 跟 f2() 的 i 又是相互独立相互不可见的,f1() 每执行一次,f1() 的 i 就加一,f2() 每次执行一次,f2() 的 i 就加油,但是相互之间不影响,因此结果是 010。
- 4.以下哪一个选项是 HTML5 的 DTD?
答案:
<!DOCTYPE html>
解析:
<!DOCTYPE>
声明必须位于 HTML5 文档中的第一行,也就是位于<html>
标签之前。该标签告知浏览器文档所使用的 HTML 规范。
DOCTYPE 声明不属于 HTML 标签,它是一条指令,告诉浏览器编写页面所用的标记的版本。在所有 HTML 文档中规定 DOCTYPE 是非常重要的,这样浏览器就能了解预期的文档类型。HTML 4.01 中的 DOCTYPE 需要对 DTD 进行引用,因为 HTML 4.01 基于 SGML。而 HTML 5 不基于 SGML,因此不需要对 DTD 进行引用,但是需要 DOCTYPE 来规范浏览器的行为(让浏览器按照它们应该的方式来运行)。
- 5.依次点击4个li标签,哪一个选项是正确的运行结果?
现有如下html结构:
<ul>
<li>click me</li>
<li>click me</li>
<li>click me</li>
<li>click me</li>
</ul>
运行如下代码:
var elements=document.getElementsByTagName('li');
var length=elements.length;
for(var i=0;i<length;i++){
elements[i].onclick=function(){
alert(i);
}
答案:依次弹出4,4,4,4。
解析:
每个li标签的 onclick 事件执行时,本身 onclick 绑定的 function 的作用域中没有变量 i,i 为 undefined,则解析引擎会寻找父级作用域,发现父级作用域中有 i,且 for 循环绑定事件结束后,i 已经赋值为 4,所以每个 li 标签的 onclick 事件执行时,alert 的都是父作用域中的 i,也就是 4。这是作用域的问题。
- 6.哪些浏览器无webkit内核?
解析:
Wekbit是一个开源的Web浏览器引擎,也就是浏览器的内核。
Apple的Safari, Google的Chrome, Nokia S60平台的默认浏览器,Apple手机的默认浏览器,Android手机的默认浏览器均采用的Webkit作为器浏览器内核。Webkit的采用程度由 此可见一斑,理所当然的成为了当今主流的三大浏览器内核之一。
另外两个分别是Gecko和Trident,大名鼎鼎的Firefox便是使用的Gecko 内核,而微软的IE系列则使用的是Trident内核。
另外,搜狗浏览器是双核的,双核并不是指一个页面由2个内核同时处理,而是所有网页(通常是标准通用标记语言的应用超文本标记语言)由webkit内核处理,只有银行网站用IE内核。
另外:
浏览器 的内核引擎,基本上是四分天下:
1)Trident: IE 以Trident 作为内核引擎;
2)Gecko: Firefox 是基于 Gecko 开发;
3)WebKit: Safari, Google Chrome,傲游3,猎豹浏览器,百度浏览器,Opera浏览器;
4)Presto: Opera的内核,但由于市场选择问题,主要应用在手机平台 - Opera mini;
注:2013年2月Opera宣布转向WebKit引擎。
注:2013年4月Opera宣布放弃WEBKIT,跟随GOOGLE的新开发的blink引擎。