阿里2015前端笔试题

分析:js有两种类型,基本数据类型和引用类型,数组是引用类型,执行第二行不仅仅是赋值,array2还生成了一个指针指向array1,也就是array2引用了array1,不管array1、array2其中有一个改变时,两个数组都会改变,执行第二行后array2和array1都等于[1,2],执行第三行后array1和array2都变为[2,2],执行第四行后,array1和array2都变为[2,2,3]

这题不用说,送分题,肯定没有float

其实做题的时候不是特别理解,但还是知道有‘重排‘这个概念的,参考一下这篇文章http://kb.cnblogs.com/page/169820/

重排何时发生

  • 添加或删除可见的DOM元素
  • 元素位置的改变
  • 元素尺寸改变
  • 内容改变
  • 页面渲染器初始化
  • 浏览器窗口尺寸的改变

这道题考了对原型链的理解,如果自身和原型链都定义了一个属性name,那么js会先确定自身对象有没有这个属性,有则返回,没有则在原型链上找,实在找不到则会返回underfind

px不用说,是相对于屏幕分辨率的相对长度单位

在使用“em”作单位时,一定需要知道其父元素的设置,因为“em”就是一个相对值,而且是一个相对于父元素的值;是个不确定的值,可能是14px也可能是20px,取决于父元素的值

“em”是相对于其父元素来设置字体大小的,这样就会存在一个问题,进行任何元素设置,都有可能需要知道他父元素的大小,在我们多次使用时,就会带来无法预知的错误风险。

css3引进了一个新的计量单位,rem,rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个参考值

参考地址:http://www.w3cplus.com/css3/define-font-size-with-css3-rem

也可以这样写

 1      function isDuplicate(){
 2         var arr = new Array();
 3             for(var i = 0;i<arguments.length;i++){
 4                 if(arr.indexOf(arguments[i]) == -1){
 5                     arr.push(arguments[i]);
 6                 }
 7             }
 8         if(arr.length<arguments.length){
 9             return true;
10         }else{
11             return false;
12         }
13         }

 

数组声明了但没有赋值,也就是说数组中是没有元素的,如果你非要写个arr[1],那么arr会返回underfind,也就是说其实声明后数组中的值都是underfind

改错题:这题考了闭包和立即执行函数

分析:先来分析一下为什么点击鼠标后都是最后一个’p‘元素变色?在firebug下调试发现其实注册onclick每次都不执行的,因为js引擎把它放在了任务队列的最后,等for循环执行完了再执行,此时取到的i当然是最后一个了;解决方法,写一个立即执行函数()();首先传参是i,但是function(j)这里面写的却是j,当时糊涂了一下下。。。

怎么改:j改为i,onclick函数中的item改为document.getElementByTagName('p')[i]就ok了,

思考:当时因为没多少时间,就没做优化,应该先获取dom值先保存起来再拿来用,要知道document每次都要遍历节点,存在效率问题

当时没时间了则题没做粗来。。。

 1 function range(){
 2             var arr = new Array();
 3                 if(arguments.length==1){
 4                     if(arguments[0] == 0){
 5                         arr = [];
 6                     }else{
 7                         arr = [arguments[0]];
 8                     }
 9                 }else if(arguments.length==2){
10                     for(var i = arguments[0];i<arguments[1];i++){
11                         arr.push(i);
12                     }
13                 }else{
14                     for(var i = arguments[0];i<arguments[1];i+=arguments[2]){
15                         arr.push(i);
16                     }
17                 }
18                 return arr;
19             }

因为参数不确定,所以我这里不用传参,我直接用了arguments(实参副本)

不过写完有种坑爹的感觉。。。

 1 function RandomArray(){
 2     var result = new Array();
 3     while (true){
 4         var num = parseInt(Math.random()*90+10);
 5         if (check(result,num) == true){
 6             result.push(num);
 7         }
 8         if (result.length == 10){
 9             break;
10         }
11     }
12     if (result != null){
13         return result.sort(function(a,b){return b-a});
14     }    
15 }
16 
17 function check(items,num){
18     for (var i = 0;i < items.length;i++){
19         if (items[i] == num){
20             return false;
21         }
22     }
23     return true;
24 }

 

阿里题库里的题都是比较基础的,我的运气也比较好,抽到的都比较简单,竟然全是js题,没有html和css。。。。。。

posted @ 2015-04-04 17:08  beggarWang  阅读(377)  评论(0编辑  收藏  举报