面试1
1.块级元素怎么样垂直水平居中?
(1)父元素position:relative,子元素position:absolute;top:50%;left:50%;margin-top:-height/2;margin-left:-width/2;
(2)父元素样式属性display:flex;子元素使用margin:auto。这种方式在子块级元素宽高不确定的时候(宽高会自适应为其里面内容的宽高)依然可以使用
(3)使用css3样式属性transform,transform中translate偏移的百分比值是相对于自身大小的
( 4 ).已知子元素的宽和高,设置其样式属性position:absolute;top:0;left:0;bottom:0;right:0;margin:auto;
2.什么是闭包?
闭包:即重用一个变量,又保护变量不被污染的一种机制。
为什么使用闭包 : 全局变量和局部变量都具有不可兼得的优缺点。
全局变量: 优: 可重用, 缺: 易被污染。
局部变量: 优: 仅函数内可用,不会被污染。缺: 不可重用!
何时使用: 只要即重用一个变量,又保护变量不被污染时。
如何: 3步:
1. 用外层函数包裹要保护的变量和内层函数。
2. 外层函数将内层函数返回到外部。
3. 调用外层函数,获得内层函数的对象,保存在外部的变量中——形成了闭包。
闭包形成的原因: 外层函数调用后,外层函数的函数作用域(AO)对象无法释放,被内层函数引用着。
闭包的缺点:
比普通函数占用更多的内存。
解决:闭包不在使用时,要及时释放。
将引用内层函数对象的变量赋值为null。
3.什么是递归?
所谓递归,简单点来说,就是一个函数直接或间接调用自身的一种方法,
递归与循环的区别 :简单来说,循环是有去无回,而递归则是有去有回(因为存在终止条件)
4.es6的了解?
(1) let 跟const : 都是块级作用域,const 是只读常量,不可重新赋值
(2) 箭头函数 :出现的作用除了让函数的书写变得很简洁,可读性很好外;最大的优点是解决了this执行环境所造成的一些问题。
历史:箭头函数(arrow function),就是C#中的lambda表达式,据说Java8也把它加入了豪华午餐。但不管怎样,JS正在从其它语言吸纳优秀的特性(比如yield, class, 默认参数等等),且不论这些特性好坏,这件事本身就是极好的(至少我们正在使用的是一个充满活力的工具)
(3) 解构赋值
(4) 模板字符串
(5) import 跟 export : import 是引入 ,export 是导出
(6) class
(7) 扩展运算符
(8) promise : 慨念和作用:promise 是异步编程的解决方案,将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。将复杂的回调函数变为链式调用。解决回调地狱。
原理:
promise
的当前状态只能是pending
、fulfilled
和rejected
三种之一。状态改变只能是pending
到fulfilled
或者pending
到rejected
。状态改变不可逆。2.
promise
的then
方法接收两个可选参数,表示该promise
状态改变时的回调5 如何在谷歌浏览器中显示12px 一下的字体?
(1) 可以使用Webkit 的内核的 -webkit-text-size-adjust 的私有 CSS 属性来解决,
加了 -webkit-text-size-adjust:none; 字体大小 就不受限制了。
注意:但是,在chrome更新到27版本之后就不可以用了。(2) 使用-webkit-transform: scale(0.5);
注意-webkit-transform: scale(0.75); 收缩的是整个span的大小,这时候,必须要将span转换成块元素,可以使用display:block/inline-block/...;
6 HTTP的了解?
工作原理:HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
常见的HTTP状态码:
200 – 请求成功
301 – 资源(网页等)被永久转移到其它URL
307 - Temporary Redirect临时重定向。
400 - Bad Request客户端请求的语法错误,服务器无法理解
404 – 请求的资源(网页等)不存在
500 – 内部服务器错误
7 , 深克隆与浅克
五种基本的数据类型:string,number,undefined,boolean,null
一种复杂的数据类型(引用类型):object 【function,array,object】
(在内存中表现为一个指针,保存在堆中)
浅克隆只是简单的复制对象,若对象其中一个属性是引用值,由于引用型变量保存的是内存的一个地址,所以后来更改属性,都指向内存中的同一块地址,最后输出的结果同样相同。
深克隆:for-in循环遍历对象上的所有属性,判断是否为引用值,若是,进行递归,直到所有属性都为原始值为止。
拷贝出来后,就是一个全新对像,就和之前没什么关系了,以前的改变也不能对新的产生影响!!