美文网首页
前端面试总结(二)

前端面试总结(二)

作者: Devour_z | 来源:发表于2017-07-18 22:11 被阅读0次

    1.window和document的常用的方法和属性有哪些,请列出来

    window
        1. window对象常见的属性
            defauleStatus:指定窗口状态栏中的信息
            status:指定当前窗口状态栏中的信息
            frames:是一个数组,其中的内容是窗口中所有的框架
            parent:指当前窗口的父窗口
            self:指当前窗口
            top:代表当前所有窗口的最顶层窗口
            window:代表当前窗口
        2.window对象常见的方法
            alert:显示带有一个“确定”按钮的对话框
            confirm:显示带有“确定”和“取消”两个按钮的对话框
            prompt:显示带有输入区的对话框
            open:打开一个新的窗口
            close:关闭用户打开的窗口
    
    document
        1.document常见的属性
            title :设置文档标题,也就是html的标签
            bgColor:设置页面的背景色
            fgColor:设置文本颜色(前景色)
            linkColor:未点击过的链接颜色
            alinkColor:焦点在此链接上的颜色
            vlinkColor:已点击过的链接颜色
            URL:设置url属性,从而在同一个窗口打开另一网页
            fileCreateDate:文件建立日期,只读属性
            fileModifiedDate:文件修改日期,只读属性
            fileSize:文件大小,只读属性
            cookie:设置和读取cookie
            charset:设置字符集
        2.document常见的方法
            write():动态向页面写入内容
            createElement(Tag):创建一个HTML标签对象
            getElementById(ID):获得指定id的对象
            getElementsByName(Name):获得之前Name的对象
            body.appendChild(oTag):向HTML中插入元素对象
    

    2.如何显示/隐藏一个DOM元素?
    有2种方法
    第一种:设置css display属性为none,效果:元素不显示,不占位
    第二种:设置css visibility属性为hidden,效果:元素不显示,但占位

    3.块级元素(如div)和行内元素(如a,b)都有哪些?
    行内元素列表:

            <a>标签可定义锚
            <abbr>表示一个缩写形式
            <acronym>定义只取首字母缩写
            <b>字体加粗
            <bdo>可覆盖默认的文本方向
            <big>大号字体加粗
            <br>换行
            <cite>引用进行定义
            <code>定义计算机代码文本
            <dfn>定义一个定义项目
            <em>定义为强调的内容
            <i>斜体文本效果
            <img>向网页中嵌入一幅图像
            <input>输入框
            <kbd>定义键盘文本
            <label>标签为
            <input> 元素定义标注(标记)
            <q>定义短的引用
            <samp>定义样本文本
            <select>创建单选或多选菜单
            <small>呈现小号字体效果
            <span>组合文档中的行内元素
            <strong>语气更强的强调的内容
            <sub>定义下标文本
            <sup>定义上标文本
            <textarea>多行的文本输入控件
            <tt>打字机或者等宽的文本效果
            <var>定义变量
    

    块级元素列表:

            <address>定义地址
            <caption>定义表格标题
            <dd>定义列表中定义条目
            <div>定义文档中的分区或节
            <dl>定义列表
            <dt>定义列表中的项目
            <fieldset>定义一个框架集
            <form>创建 HTML 表单
            <h1>定义最大的标题
            <h2>定义副标题
            <h3>定义标题
            <h4>定义标题
            <h5>定义标题
            <h6>定义最小的标题
            <hr>创建一条水平线
            <legend>元素为 
            <fieldset>元素定义标题
            <li>标签定义列表项目
            <noframes>为那些不支持框架的浏览器显示文本,于 frameset 元素内部
            <noscript>定义在脚本未被执行时的替代内容
            <ol>定义有序列表
            <ul>定义无序列表
            <p>标签定义段落
            <pre>定义预格式化的文本
            <table>标签定义 HTML 表格
            <tbody>标签表格主体(正文)
            <td>表格中的标准单元格
            <tfoot>定义表格的页脚(脚注或表注)
            <th>定义表头单元格
            <thead>标签定义表格的表头
            <tr>定义表格中的行
    

    **4.开发移动端页面要注意什么?如何适配不同尺寸屏幕?
    **
    机设备屏幕尺寸不一,做移动端的Web页面,需要考虑在安卓/IOS的各种尺寸设备上的兼容

    1)viewport视口
         viewport是严格的等于浏览器的窗口。

    visual viewport 可见视口 屏幕宽度
    layout viewport 布局视口 DOM宽度
    ideal viewport 理想适口:使布局视口就是可见视口
    设备宽度(visual viewport)与DOM宽度(layout viewport), scale的关系为:
    
    (visual viewport)= (layout viewport)* scale
    获取屏幕宽度(visual viewport)的尺寸:window. innerWidth/Height。
    获取DOM宽度(layout viewport)的尺寸:document. documentElement. clientWidth/Height。
    

    设置理想视口:把默认的layout viewport的宽度设为移动设备的屏幕宽度,得到理想视口(ideal viewport):

    <meta name="viewport" content="width=device-width,initial-scale=1">

    2)动态设置视口缩放为1/dpr
    对于安卓,所有设备缩放设为1,对于IOS,根据dpr不同,设置其缩放为dpr倒数。
    在iPhone6上,缩放为0.5,即CSS像素2px最终显示效果为1px,而在scale=1的设备,CSS像素1px显示效果为1px,那么,为了达到显示效果一致,以px为单位的元素(比如字体大小),其样式应有适配不同dpr的版本,为了方便写,在动态设置viewport: scale的时候,同时在html根元素上加上data-dpr=[dpr],样式示例:

    .p {
        font-size: 14px;
    
      [data-dpr="2"] & {
        font-size: 14px * 2;
      }
    
      [data-dpr="3"] & {
        font-size: 14px * 3;
      }
    }
    

    为写样式方便,可以借助sass的mixin写代码片段:

    
    // 适配dpr的字体大小
    @mixin font-dpr($font-size){
      font-size: $font-size;
    
      [data-dpr="2"] & {
          font-size: $font-size * 2;
      }
    
      [data-dpr="3"] & {
          font-size: $font-size * 3;
      }
    }
    @mixin px-dpr($property, $px) {
      #{$property}: $px;
    
      [data-dpr="2"] & {
        #{$property}: $px * 2;
      }
    
      [data-dpr="3"] & {
        #{$property}: $px * 3;
      }
    }
    
    // 使用
    @include font-dpr(14px);
    @include px-dpr(width, 40px); @include px-dpr(height, 40px);
    

    3)rem
    公式:

    (function(win,doc){
        function change(){
            doc.documentElement.style.fontSize=
    100*doc.documentElement.clientWidth/1366+'px';
        }
         change();
        win.addEventListener('resize',change,false);    
    })(window,document)
    

    4)flex布局
    点击查看详情

    5.开发过程中遇到哪些内存泄漏情况,如何解决的?
    点击查看详情

    6.什么是闭包?并用代码表示出来
    1)、什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:
      ①. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
      ②. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。 
     简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
    2)、闭包的几种写法和用法

    //第1种写法  
    function Circle(r) {  
          this.r = r;  
    }  
    Circle.PI = 3.14159;  
    Circle.prototype.area = function() {  
      return Circle.PI * this.r * this.r;  
    }  
      
    var c = new Circle(1.0);     
    alert(c.area());
    
    //第2种写法  
    var Circle = function() {  
      var obj = new Object();  
      obj.PI = 3.14159;  
        
      obj.area = function( r ) {  
          return this.PI * r * r;  
      }  
      return obj;  
    }  
     
    var c = new Circle();  
    alert( c.area( 1.0 ) );
    
    //第3种写法  
    var Circle = new Object();  
    Circle.PI = 3.14159;  
    Circle.Area = function( r ) {  
           return this.PI * r * r;  
    }  
      
    alert( Circle.Area( 1.0 ) );  
    
    //第4种写法  
    var Circle={  
       "PI":3.14159,  
     "area":function(r){  
              return this.PI * r * r;  
            }  
    };  
    alert( Circle.area(1.0) ); 
    

    3)Javascript闭包的用途

    事实上,通过使用闭包,我们可以做很多事情。比如模拟面向对象的代码风格;更优雅,更简洁的表达出代码;在某些方面提升代码的执行效率。
    ①、匿名自执行函数

    var data= {    
        table : [],    
        tree : {}    
    };    
         
    (function(dm){    
        for(var i = 0; i < dm.table.rows; i++){    
           var row = dm.table.rows[i];    
           for(var j = 0; j < row.cells; i++){    
               drawCell(i, j);    
           }    
        }    
           
    })(data);
    

    ②结果缓存

    var CachedSearchBox = (function(){    
        var cache = {},    
           count = [];    
        return {    
           attachSearchBox : function(dsid){    
               if(dsid in cache){//如果结果在缓存中    
                  return cache[dsid];//直接返回缓存中的对象    
               }    
               var fsb = new uikit.webctrl.SearchBox(dsid);//新建    
               cache[dsid] = fsb;//更新缓存    
               if(count.length > 100){//保正缓存的大小<=100    
                  delete cache[count.shift()];    
               }    
               return fsb;          
           },    
         
           clearSearchBox : function(dsid){    
               if(dsid in cache){    
                  cache[dsid].clearSelection();      
               }    
           }    
        };    
    })();    
         
    CachedSearchBox.attachSearchBox("input");   
    

    ③封装

    var person = function(){    
        //变量作用域为函数内部,外部无法访问    
        var name = "default";       
           
        return {    
           getName : function(){    
               return name;    
           },    
           setName : function(newName){    
               name = newName;    
           }    
        }    
    }();    
         
    print(person.name);//直接访问,结果为undefined    
    print(person.getName());    
    person.setName("abruzzi");    
    print(person.getName());    
       
    得到结果如下:  
       
    undefined  
    default  
    abruzzi  
    

    ④实现类和继承

    function Person(){    
        var name = "default";       
           
        return {    
           getName : function(){    
               return name;    
           },    
           setName : function(newName){    
               name = newName;    
           }    
        }    
        };   
     
        var p = new Person();
        p.setName("Tom");
        alert(p.getName());
     
        var Jack = function(){};
        //继承自Person
        Jack.prototype = new Person();
        //添加私有方法
        Jack.prototype.Say = function(){
            alert("Hello,my name is Jack");
        };
        var j = new Jack();
        j.setName("Jack");
        j.Say();
        alert(j.getName());
    

    相关文章

      网友评论

          本文标题:前端面试总结(二)

          本文链接:https://www.haomeiwen.com/subject/nsxkkxtx.html