撩课-Web大前端每天5道面试题-Day16
1.for循环中的作用域问题?
写出以下代码输出值,尝试用es5和es6的方式进行改进输出循环中的i值。
for (var i=; i<=; i++) {
setTimeout(function timer() {
console.log(i);
}, i*);
} 输出5个6,因为回调函数在for循环之后执行,所有函数共享一个i的引用。
es5: for (var i=; i<=; i++) {
(function(j) {
setTimeout(function timer() {
console.log(j);
}, j*);
})(i);
} es6: for (let i=; i<=; i++) {
setTimeout(function timer() {
console.log(i);
}, i*);
}
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 标准的 位双精度浮点数的小数部分最多支持 位二进制位,所以两者相加之后得到二进制为:
JavaScript 代码:
0.0100110011001100110011001100110011001100110011001100
因浮点数小数位的限制而截断的二进制数字,再转换为十进制,
就成了 0.30000000000000004。所以在进行算术计算时会产生误差。
5.说说HTTP method分别有哪些,他们各自做了哪些事情?
.一台服务器要与HTTP1.1兼容,只要为资源实现GET和HEAD方法即可。 .GET是最常用的方法,通常用于请求服务器发送某个资源。 .HEAD与GET类似,但服务器在响应中值返回首部,不返回实体的主体部分。 .PUT让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,
或者,如果那个URL已经存在的话,就用干这个主体替代它。 .POST起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。
表单中填好的数据通常会被送给服务器,然后由服务器将其发送到要去的地方。 .TRACE会在目的服务器端发起一个环回诊断,
最后一站的服务器会弹回一个TRACE响应并在响应主体中携带它收到的原始请求报文。
TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。 .OPTIONS方法请求web服务器告知其支持的各种功能。
可以查询服务器支持哪些方法或者对某些特殊资源支持哪些方法。 .DELETE请求服务器删除请求URL指定的资源。
撩课-Web大前端每天5道面试题-Day16的更多相关文章
- 撩课-Web大前端每天5道面试题-Day10
1. px和em的区别? px和em都是长度单位; 区别是: px的值是固定的,指定是多少就是多少, 计算比较容易. em得值不是固定的,并且em会继承父级元素的字体大小. 浏览器的默认字体高都是16 ...
- 撩课-Web大前端每天5道面试题-Day4
1. 如何实现瀑布流? 瀑布流布局的原理: ) 瀑布流布局要求要进行布置的元素等宽, 然后计算元素的宽度, 与浏览器宽度之比,得到需要布置的列数; ) 创建一个数组,长度为列数, 里面的值为已布置元素 ...
- 撩课-Web大前端每天5道面试题-Day1
1. var的变量提升的底层原理是什么? JS引擎的工作方式是: 1) 先解析代码,获取所有被声明的变量: 2)然后在运行.也就是说分为预处理和执行两个阶段. 变量提升:所有变量的声明语句都会被提升到 ...
- 撩课-Web大前端每天5道面试题-Day11
1. 如何手写一个JQ插件? 方式一: $.extend(src) 该方法就是将src合并到JQ的全局对象中去: $.extend({ log: ()=>{alert('撩课itLike');} ...
- 撩课-Web大前端每天5道面试题-Day31
1.web storage和cookie的区别? Web Storage的概念和cookie相似, 区别是它是为了更大容量存储设计的. Cookie的大小是受限的, 并且每次你请求一个新的页面的时候C ...
- 撩课-Web大前端每天5道面试题-Day25
1.web前端开发,如何提高页面性能优化? 内容方面: .减少 HTTP 请求 (Make Fewer HTTP Requests) .减少 DOM 元素数量 (Reduce the Number o ...
- 撩课-Web大前端每天5道面试题-Day7
1. 你能描述一下渐进增强和优雅降级之间的不同吗? 定义: 优雅降级(graceful degradation): 一开始就构建站点的完整功能, 然后针对浏览器测试和修复 渐进增强(progressi ...
- 撩课-Web大前端每天5道面试题-Day30
1.什么叫优雅降级和渐进增强? 优雅降级: Web站点在所有新式浏览器中都能正常工作, 如果用户使用的是老式浏览器, 则代码会针对旧版本的IE进行降级处理了, 使之在旧式浏览器上以某种形式降级体验却不 ...
- 撩课-Web大前端每天5道面试题-Day23
1.为什么用Nodejs,它有哪些优缺点? 优点: 事件驱动,通过闭包很容易实现客户端的生命活期. 不用担心多线程,锁,并行计算的问题 V8引擎速度非常快 对于游戏来说,写一遍游戏逻辑代码,前端后端通 ...
随机推荐
- Python面向对象(定义类和创建对象)
day24 http://www.cnblogs.com/wupeiqi/p/4493506.html Python:函数式+面向对象,函数式编程可以做所有事,但是不一定合适. 小明,10岁,男,上山 ...
- [Objective-C语言教程]类别(28)
有时,可能会发现希望通过添加仅在某些情况下有用的行为来扩展现有类. 要向现有类添加此类扩展,Objective-C提供了类别和扩展. 如果需要向现有类添加方法,或许为了添加功能以便在应用程序中更容易地 ...
- 总结day23 ---- 网络编程,以及计算机基础概念
计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...
- Spring注解大全,汇总版
Spring使用的注解大全和解释 注解 解释 @Controller 组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类 ...
- FTP在docker容器中上传失败解决,改为被动模式
package com.mayocase.takeout.utils; import org.apache.commons.net.ftp.FTPClient; import org.apache.c ...
- Carte作为Windows服务
有一些用例将Carte作为Windows服务运行: 当使用命令窗口运行Carte实例时,任何人都会错误地关闭实例并且Carte将关闭. Carte.bat命令窗口与调用批处理文件的用户会话相关联,需要 ...
- 进阶篇:4.3)DFA设计指南:宽松公差及人性装配及其他
本章目的:设计需要为装配考虑,给他们提供各种优待,装配才能做出好产品. 1.前言 机械贴合现实而软件远离现实. 越是学习机械设计的原则,越是感觉他们和一些做人做事的道理相同的. 如,机械设计原则都是有 ...
- python 进程与线程(理论部分)
一.理论部分 一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的 ...
- spring boot快速入门 7: 使用aop处理请求
样例:登陆拦截(aop简单样例) 第一步:在pom 文件中加入aop依赖 <!-- spring aop --> <dependency> <groupId>org ...
- django+mysql+html简单demo之 views+html
#coding=utf-8 from __future__ import unicode_literals from django.shortcuts import render,render_to_ ...