1、腾讯 web 前端开发工程师笔试题及答案1、 如何实现事件委托?首先要知道什么是事件委托。考虑一个列表,在 li 的数量非常少的时候,为每一个 li 添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少遇到这么多 li 的情况),为每个 li 添加事件侦听就会对页面性能产生很大的影响。就像下面这段代码:js 性能优化精通 css精通 js精通 html(function()var a=document.getElementById(list);var b=a.getElementsByTagName(li);for(var
2、 i=0;i首先,我们来想下,产生性能问题的根本原因是什么呢?li 元素(目标对象)所要进行的事件处理了。怎么可以解决这种囧况呢?答案就是采用事件委托,将在 li 对象上面要处理的事件委托给父元素或者祖先元素,即为父元素绑定事件侦听,看看下面的改进代码:js 性能优化精通 css精通 js精通 html(function()var a=document.getElementById(list);a.addEventListener(click,function(e)var b = e.target; alert(b.innerHTML);,false);)();虽然现在很多框架都已经实现了事件
3、委托,但是作为一个开发人员,用框架的同时我们也应该知道他实现的原理是如何的,知其然,更要知其所以然2、 将 10 进制的数 302 转为二进制。十进制转二进制的原理是: 用 2 辗转相除至结果为 1 将余数和最后的 1 从下向上倒序写 就是结果 例如 302 302/2 = 151 余 0 151/2 = 75 余 1 75/2 = 37 余 1 37/2 = 18 余 1 18/2 = 9 余 0 9/2 = 4 余 1 4/2 = 2 余 0 2/2 = 1 余 0 故二进制为 100101110 所以程序可以写成这样:var a=302;var str=“;while(a1)str =
4、a%2 + str;a = parseInt(a/2);str = a+str;3、 js 中运算符的优先级(此非原题,为原理题)运算符 描述. () 字段访问、数组下标、函数调用以及表达式分组+ - - ! delete new typeof void 一元运算符、返回数据类型、对象创建、未定义值* / % 乘法、除法、取模+ - + 加法、减法、字符串连接 移位= instanceof 小于、小于等于、大于、大于等于、instanceof= != = != 等于、不等于、严格相等、非严格相等)详细说明访问网站:http:/ NaN * 6=_NaN_7、 JS 中调用某个函数之前,如何取得
5、该函数最多可以传递多少个参数?该函数被调用时,如果知道传了多少个参数过来?假设函数名为 fun,那个 fun.length 就是它最多能接受的参数个数;在 fun 函数里面,arguments 就是用数组装着调用时传过来的所有参数,因此arguments.length 就是已经传递过来的参数个数;如:function needTwoPara(p1,p2)var a=arguments;var result=我是个需要+needTwoPara.length+个参数的函数 n+您输入的参数的个数为:+a.length+nfor(var i=0, len = a.length; i len; i+)
6、result=result+第+(i+1)+个参数为:+ai+nresult+=以上是用 arguments 来获得参数n;result+=下面用变量来获得参数:n;result+=p1:+p1+n;result+=p2:+p2+n;alert(result);alert(needTwoPara.length);needTwoPara(ooooo);运行结果为:2我是个需要 2 个参数的函数您输入的参数的个数为:1第 1 个参数为:ooooo以上是用 arguments 来获得参数下面用变量来获得参数:p1:ooooop2:undefined8、 软件 HttpWatch 的作用?可以参考:h
7、ttp:/ JS 如何得到 HTTP 的请求头信息和返回的头信息?Javascript 中跟 response header 有关的就两个方法:getResponseHeader 从响应信息中获取指定的 http 头 语法strValue =oXMLHttpRequest.getResponseHeader(bstrHeader);getAllResponseHeaders 获取响应的所有 http 头 语法strValue =oXMLHttpRequest.getAllResponseHeaders();需要注意的是,通常,在 IE 下不能完整的获取 header 报头数据,只能取到如下 header 数据:X-Powered-By:X-UA-Compatible:Keep-Alive:Transfer-Encoding:Content-Type:比如你要获取时间戳,在 IE 下必须做些特殊处理,需要在后端设置一下,关闭缓存:1. header( Cache-Control: no-store); / 关闭缓存