博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
撩课-Web大前端每天5道面试题-Day16
阅读量:5115 次
发布时间:2019-06-13

本文共 2549 字,大约阅读时间需要 8 分钟。

1.for循环中的作用域问题?

写出以下代码输出值,尝试用es5和es6的方式进行改进输出循环中的i值。for (var i=1; i<=5; i++) {     setTimeout(function timer() {        console.log(i);     }, i*1000); }输出5个6,因为回调函数在for循环之后执行,所有函数共享一个i的引用。es5:for (var i=1; i<=5; i++) {     (function(j) {         setTimeout(function timer() {             console.log(j);         }, j*1000);     })(i); }es6:for (let i=1; i<=5; i++) {     setTimeout(function timer() {         console.log(i);    }, i*1000); }

 

2.重绘和回流?

重绘:当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。回流:当Render Tree(DOM)中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。回流要比重绘消耗性能开支更大。回流必将引起重绘,重绘不一定会引起回流。

 

3.原型及原型链?

原型的理解:  所有的引用类型(数组、对象、函数),都具有对象特性,即可自由扩展属性(null除外)  所有的引用类型(数组、对象、函数),都有一个__proto__属性,属性值是一个普通的对象  所有的函数,都有一个prototype属性,属性值也是一个普通的对象  所有的引用类型(数组、对象、函数),__proto__属性值指向它的构造函数的prototype属性值原型链的理解代码如下:// 构造函数function Foo(name, age) {    this.name = name}Foo.prototype.alertName = function () {    alert(this.name)}// 创建示例var f = new Foo('zhangsan')f.printName = function () {    console.log(this.name)}// 测试f.printName()f.alertName()f.toString()因为f本身没有toString(),并且f.__proto__(即Foo.prototype)中也没有toString。当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性, 那么会去它的__proto__(即它的构造函数的prototype)中寻找。如果在f.__proto__中没有找到toString,那么就继续去f.__proto__. __proto__中寻找,因为f.__proto__就是一个普通的对象而已嘛!f.__proto__即Foo.prototype,没有找到toString,继续往上找f.__proto__.__proto__即Foo.prototype.__proto__。Foo.prototype就是一个普通的对象, 因此Foo.prototype.__proto__就是Object.prototype,在这里可以找到toString。因此f.toString最终对应到了Object.prototype.toString这样一直往上找,你会发现是一个链式的结构,所以叫做“原型链”。如果一直找到最上层都没有找到,那么就宣告失败,返回undefined。 最上层是什么 —— Object.prototype.__proto__ === null

 

4.js浮点数运算精度问题(0.1+0.2!==0.3,比如在 JavaScript 中计算 0.1 + 0.2时,到底发生了什么呢?

首先,十进制的0.1和0.2都会被转换成二进制,但由于浮点数用二进制表达时是无穷的,例如。JavaScript 代码:0.1 -> 0.0001100110011001...(无限)0.2 -> 0.0011001100110011...(无限)IEEE 754 标准的 64 位双精度浮点数的小数部分最多支持 53 位二进制位,所以两者相加之后得到二进制为:JavaScript 代码:0.0100110011001100110011001100110011001100110011001100因浮点数小数位的限制而截断的二进制数字,再转换为十进制,就成了 0.30000000000000004。所以在进行算术计算时会产生误差。

 

5.说说HTTP method分别有哪些,他们各自做了哪些事情?

1.一台服务器要与HTTP1.1兼容,只要为资源实现GET和HEAD方法即可。2.GET是最常用的方法,通常用于请求服务器发送某个资源。3.HEAD与GET类似,但服务器在响应中值返回首部,不返回实体的主体部分。4.PUT让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用干这个主体替代它。5.POST起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到要去的地方。6.TRACE会在目的服务器端发起一个环回诊断,最后一站的服务器会弹回一个TRACE响应并在响应主体中携带它收到的原始请求报文。TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。7.OPTIONS方法请求web服务器告知其支持的各种功能。可以查询服务器支持哪些方法或者对某些特殊资源支持哪些方法。8.DELETE请求服务器删除请求URL指定的资源。

 

转载于:https://www.cnblogs.com/gxq666/p/10166820.html

你可能感兴趣的文章
Interop type 'jmail.POP3Class' cannot be embedded. Use the applicable interface instead.
查看>>
Best Coder Round#25 1003 树的非递归访问
查看>>
SPOJ QTree【树链剖分】
查看>>
Process Node.js 进程
查看>>
学习进度条
查看>>
2017年4月14日
查看>>
第八篇:ZTree操作总结
查看>>
class layout basic 2
查看>>
Unity2D 小游戏之 RocketMouse
查看>>
H - A Shooting Game
查看>>
【洛谷P3369】 (模板)普通平衡树
查看>>
3-20 标准库:find库; 学习编程语言3节课(大多是旧识,全*栈)3-21 面向对象. Percent Strings; 元编程和Rails的相互理解...
查看>>
install and use zookeeper C client API
查看>>
java程序执行顺序
查看>>
建造者模式(Java与Kotlin版)
查看>>
常用算法之冒泡排序
查看>>
override和new的区别
查看>>
dom
查看>>
『ACM C++』 PTA 天梯赛练习集L1 | 048-49
查看>>
POSIX 线程详解
查看>>