• 阿里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。。。。。。

  • 相关阅读:
    错误网络异常:android.os.NetworkOnMainThreadException
    方法服务android学习笔记42_服务的生命周期
    芯片软件随想录(关于核心技术)
    数组比特【编程珠玑】如何优化程序打印出小于100000的素数
    宋体函数Java乔晓松oracle分组函数
    调试客户端windbg远程调试方法
    方法对象Hibernate联合主键
    文件运行跟踪 root.sh 的 执行过程
    移植交叉编译pcDuino + busybox 成功搭建最小linux系统
    方法定制iOS学习笔记8UITableView的定制
  • 原文地址:https://www.cnblogs.com/jianjianwoshi/p/4392452.html
Copyright © 2020-2023  润新知