腾讯web前端开发工程师笔试题及答案 .pdf
腾讯web前端开发工程师笔试题及答案
1、如何实现事件委托?
首先要知道什么是事件委托。
考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性
能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,
实际工作中很少遇到这么多li的情况),为每个li添加事件侦听就会对页面性能产生很大
的影响。
就像下面这段代码:
!DOCTYPEHTML
html
head
metacharset=utf-8/
titlejs性能优化/title
/head
body
ulid=list
li精通css/li
li精通js/li
li精通html/li
/ul
/body
/html
scripttype=text/javascript
(function(){
vara=document.getElementById(list);
varb=a.getElementsByTagName(li);
for(vari=0;ib.length;i++){
b[i].addEventListener(click,function(e){
varc=e.target;
alert(c.innerHTML);
},false);
}
})();
/script
首先,我们来想下,产生性能问题的根本原因是什么呢?li元素(目标对象)所要进行的事
件处理了。怎么可以解决这种囧况呢?
答案就是采用事件委托,将在li对象上面要处理的事件委托给父元素或者祖先元素,即为父
元素绑定事件侦听,
看看下面的改进代码:
!DOCTYPEHTML
html
head
metacharset=utf-8/
titlejs性能优化/title
/head
body
ulid=list
li精通css/li
li精通js/li
li精通html/li
/ul
/body
/html
scripttype=text/javascript
(function(){
vara=document.getElementById(list);
a.addEventListener(click,function(e){
varb=e.target;
alert(b.innerHTML);
},false);
})();
/script
虽然现在很多框架都已经实现了事件委托,但是作为一个开发人员,用框架的同时我们也
应该知道他实现的原理是如何的,知其然,更要知其所以然
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
所以程序可以写成这样:
vara=302;
varstr=;
while(a1){
str=a%2+str;
a=parseInt(a/2);
}
str=a+str;
3、js中运算符的优先级(此非原题,为原理题)
运算符描述
.[]()字段访问、数组下标、函数调用以及表达式分组
++---~!deletenewtypeofvoid一元运算符、返回数据类型、对象创建、未定义值
*/%乘法、除法、取模
+-+加法、减法、字符串连接
移位
==instanceof小于、小于等于、大于、大于等于、instanceof
==!====!==等于、不等于、严格相等、非严格相等