zoukankan      html  css  js  c++  java
  • 记一次前端笔试

    1、写出元素垂直居中的方法

    方法一:在不知道自己高度和父元素高度的情况下,利用绝对定位

    父元素position:relative;

    子元素position:absolute;top:50%;transform:translateY(-50%);

    方法二:知道子元素高度的情况下,利用绝对定位

    父元素position:relative;

    子元素position:absolute;top:50%;left:50%;margin-left和margin-top分别为宽高的负一半。

    方法三:设置height和line-height为相同的值,但是这只应用于单行文本

    2、margin越界的解决方法

    方法一:父元素设置border

    方法二:父元素设置padding-top

    方法三:父元素设置overflow:hidden

    方法四:父元素设置伪类:before{

                                                    content:'';

                                                    display:table;

                                              }

    3、简述box-sizing的属性

    在说box-sizing之前先说下盒模型,盒模型分两种,IE盒模型和W3C盒模型。

    IE盒模型:content内容包括了padding和border

    W3C盒模型:content内容不包含其他两部分

    box-sizing:content-box|border-box|padding-box

    content-box(默认值):宽度不包含padding和border

    border-box:宽度包含padding和border

    padding-box:宽度包含padding

    4、简述对闭包的理解

    闭包就是函数中的函数,里面的函数可以访问外面函数的变量。

    闭包的作用:1)、使用闭包可以访问函数外的变量

                         2)、可以使变量长期保存在内存中,生命周期比较长。

    闭包要注意的地方:1)、闭包不能滥用,否则会导致内存泄漏,影响网页的性能

                                    2)、闭包使用完之后,要立即释放资源

    5、简述几种本地存储,并写出其区别

    cookie、sessionStroge、localStroge

    共同点:都是保存在浏览器中,且都是同源的

    区别:

    1)、cookie在浏览器和服务器间来回传递

             sessionStroge和localStrige不会自动把数据发送给服务器,仅用于本地保存。

             cookie还有路径(path)的概念,可以限制cookie只属于某个路径下。

    2)、存储大小限制不同

             cookie数据不能超过4k

             sessionStroge和localStrige虽然也有限制,但可以达到5M以上

    3)、数据有效期不同

             cookie只在设置的cookie过期之前有效,即使窗口或浏览器关闭

             sessionStroge只在当前浏览器关闭之前有效

             localStroge不管浏览器关闭与否,数据永久保存

    4)、作用域不同

             cookie数据在所有同源窗口中都是共享的

            sessionStroge在不同浏览器窗口不共享,即使是同一个页面

    6、数组去重

    1         function test(arr){
    2             var temp=[];
    3             for(var i=0;i<arr.length;i++){
    4                 if(temp.indexOf(arr[i])==-1){
    5                     temp.push(arr[i]);
    6                 }
    7             }
    8             return temp;
    9         }

    7、一个ul包含10个li,实现点击对应的li,输出其内容。

    方法一:利用this

     1         var myul = document.getElementsByTagName("ul")[0];  
     2         var li = myul.getElementsByTagName("li");  
     3         function foo(){
     4             for(var i=0;i<li.length;i++){
     5                 li[i].onclick=function(){
     6                     alert(this.innerHTML)
     7                 }
     8             }
     9         }
    10         foo();

    方法二:事件委托

     1 var myul = document.querySelector('ul');  
     2 var list = document.querySelectorAll('ul li');  
     3   
     4 myul.addEventListener('click', function(ev){  
     5     var ev = ev || window.event;  
     6     var target = ev.target || ev.srcElemnt;  
     7   
     8     for(var i = 0, len = list.length; i < len; i++){  
     9         if(list[i] == target){  
    10             alert(target.innerHTML);  
    11         }  
    12     }  
    13 }); 

    8、JS实现深拷贝

     JS中数据类型分为基本数据类型(null、undefined、number、string、boolean)和引用类型(object、array、function)。

    基本类型存放在栈内存中,引用类型存放在堆内存中。

    栈内存存放基本类型的变量,堆内存存放new出来的变量。

    浅拷贝就是将直接复制,复制前后前后的两个对象指向同一个内存地址,对其中一个进行操作,另一个也会发生同样的变化。他们只是不同的指针指向了同一块内存。

    深拷贝则是开辟了一个新的内存地址,把其内容完完全全复制到新的内存中,之后对这个新对象的任何操作都不会影响到原先对象(既两边的操作都不会影响彼此),他们两个成了完全独立的对象

    对于基本类型的变量可以进行浅拷贝,但对于引用类型的变量就得用深拷贝。

    可以通过遍历+递归实现深拷贝

     1 function deepClone ( obj ) {
     2     if( typeof obj != "object" ){
     3         return obj ;
     4     }  
     5 
     6     var newObj = obj.constructor === Array ? [] : {};  //开辟一块新的内存空间
     7 
     8     for( var i  in  obj ) {
     9         newObj [ i ] = deepClone ( obj [ i ] );                 //通过递归实现深层的复制 
    10     }
    11 
    12   return newObj;
    13 }

    此外,还可以通过使用一些框架或库里的方法来完成深拷贝

    比如jquery里的extend()方法:extend(deep,object)     //第一个参数为可选参数,默认为false,如果传入true,则实现的就是深拷贝

  • 相关阅读:
    《免费:商业的未来》书摘
    wxWidgets的安装编译、相关配置、问题分析处理
    CodeBlocks的下载安装、配置、简单编程
    【最新】让快捷方式 实现相对路径——非.bat方式实现
    跨平台C/C++集成开发环境-Code::Blocks-内置GCC
    IOS自定义alertview
    IOS快速开发之常量定义
    为UITableViewController瘦身
    IOS中扩展机制Category和associative
    IOS制作一个漂亮的登录界面
  • 原文地址:https://www.cnblogs.com/endlessmy/p/8506108.html
Copyright © 2011-2022 走看看