搜狗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引擎。

原文地址:https://www.cnblogs.com/HuoAA/p/5074262.html