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如何处理
**本题目解答均自己整理,不保证正确性