第四次前端面试题目整理(我的解答)

1、JavaScript中如何实现闭包,它的好处是什么?

通过在函数内部定义子函数来实现闭包。好处主要有两点:①能实现函数外部对函数内部变量(局部变量)的读取。②重用函数内部变量。闭包引用的函数内部变量会一直保存在内存中,直到手动释放内存。

2、不使用jQuery等库类,如何实现一个跨域请求?

①使用代理

②HTML5中提供的XMLHTTPREQUEST Level2已经实现了跨域访问,但ie10以下不支持。只需在服务端加上响应头:

header("Acess-Control-Allow-Origin:*")
header("Acess-Control-Allow-Methods:GET,POST")

3、请写出css有哪些选择符

①id 选择器(#myid)

②类选择器(.myclassname)

③元素选择器(div,h1,p)

④相邻兄弟选择器(h1 + p)

⑤子元素选择器(ul > li)

⑥后代选择器(li a)

⑦通配符选择器(* )

⑧属性选择器( a[rel = "external"])

⑨伪类选择器(a: hover, li: nth - child)

⑩选择器分组(两选择器中间用逗号分隔)

属性选择器还有很多情况,具体查看w3school

4、请写出id,tag,class,!important在样式设置中的优先级

!important>id>class>tag

5、请介绍box-sizing的属性

①content-box:指定盒子模型为W3C盒子模型,即width和height包括padding、border。浏览器标准模式下的显示。
②border-box:指定盒子模型为IE盒子模型,即width和height不包括padding、border。浏览器进入怪异模式时的盒子模型。
③inherit:指定box-sizing的值应该从父元素继承。

6、display:none和visibility:hidden的区别

display:none 对象隐藏后不占任何空间  (display设置元素表现形式)

visibility:hidden 对象隐藏后仍占据原来的空间(visibility设置元素可见性)

7、说说<input type = text />在ie下显示有哪些兼容问题,如何解决?

【这里网上找不到答案,回头找个IE测试下】

交互问题:当input元素还未插入文档流之前,是可以修改它的值的,在ie和ff下都没问题。但如果input已经存在于页面,其type属性在ie下就成了只读属性了,不可以修改。在ff下仍是可读写属性。(这里的ff应该是firefox)

解决方法:用js修改input的type类型。但ie下这么做不可行,所以只能换个思路,写两个input,一个text类型,一个要更改的类型,分得监听onfocus和onblur事件。

8、$(docunment).on('click' , '.selector' , function(event){//to do}),这段代码在移动端safari内核和Chrome时候会有什么问题?

/*Safari是浏览器名称,Chrome也是浏览器名称,不知道为什么并列起来Safari要加上内核这两字,这题目前不知道如何解答。*/


9、 如何实现下面结构隔行设置背景色

       <ul>
            <li>第一行</li>
            <li>第二行</li>
            <li>第三行</li>
            <li>第四行</li>
        </ul>

我的解答:

    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script type="text/javascript">
        $(function(){
            $("li:even").css("background","blue");
            $("li:odd").css("background","red");
        })
    </script>

:odd  匹配所有索引值为奇数的元素,从 0 开始计数.查找表格的2、4、6行(即索引值1、3、5...)

:even  匹配所有索引值为偶数的元素,从 0 开始计数.查找表格的1、3、5...行(即索引值0、2、4...)


10、请用正则表达式写出验证邮箱和手机号码

手机号码验证规则:11位数字,以1开头

var res = /^1\d{10}$/

邮箱验证规则:姑且把邮箱地址分成“第一部分@第二部分”这样
第一部分:由字母、数字、下划线、短线“-”、点号“.”组成,
第二部分:为一个域名,域名由字母、数字、短线“-”、域名后缀组成,
而域名后缀一般为.xxx或.xxx.xx,一区的域名后缀一般为2-4位,如cn,com,net,现在域名有的也会大于4位

 var res = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/

/*可以在控制台用res.test("测试数据")来验证表达式正确性,正确控制台输出true*/


面试提到的问题

1、css3如何实现loading动画

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>loading动画实现</title>
</head>
<style type="text/css">
    body{
        text-align:center;
    }
    .container{
        display: inline-block;
    }
    .point{
        width:10px;
        height:10px;
        background:#2196F3;
        border-radius:50%;
        float:left;
        margin-left:5px;
        animation:myAnima 1.2s ease-in-out infinite; 
    }
    .two{
        animation-delay: 200ms;
    }
    .three{
        animation-delay: 400ms;
    }
    @keyframes myAnima{
        from {opacity: 0.8}
        to{opacity: 0}
    }
</style>
<body>
<div class="container">
    <div class="point one"></div>    
    <div class="point two"></div>    
    <div class="point three"></div>    
</div>
</body>
</html>

2、多层ajax请求用promise如何处理




**本题目解答均自己整理,不保证正确性

猜你喜欢

转载自blog.csdn.net/ion_l/article/details/81046016