撩课-Web大前端每天5道面试题-Day24
1.下面的代码将输出什么?
for (var i = ; i < ; i++) {
setTimeout(function() { console.log(i); }, i * );
} 闭包在这里能起什么作用?
上面的代码不会按预期显示值0,,,,和4,
而是会显示5,,,,和5。 原因是,在循环中执行的每个函数将整个循环完成之后被执行,
因此,将会引用存储在 i中的最后一个值,那就是5。 闭包可以通过为每次迭代创建一个唯一的范围,
存储范围内变量的每个唯一的值,
来防止这个问题,
如下: for (var i = ; i < ; i++) {
(function(x) {
setTimeout(function() { console.log(x); }, x * );
})(i);
} 这就会按预期输出0,,,,和4到控制台。
2.ES5、ES6和ES2015有什么区别?
ES2015特指在2015年发布的新一代JS语言标准,
ES6泛指下一代JS语言标准,
包含ES2015、ES2016、ES2017、ES2018等。 现阶段在绝大部分场景下,
ES2015默认等同ES6。 ES5泛指上一代语言标准。 ES2015可以理解为ES5和ES6的时间分界线。
3.Iterator是什么,有什么作用?
Iterator是ES6中一个很重要概念, 它并不是对象,
也不是任何一种数据类型。
因为ES6新增了Set、Map类型,
他们和Array、Object类型很像,Array、Object都是可以遍历的,
但是Set、Map都不能用for循环遍历,
解决这个问题有两种方案,
一种是为Set、Map单独新增一个用来遍历的API,
另一种是为Set、Map、Array、Object新增一个统一的遍历API,
显然, 第二种更好,
ES6也就顺其自然的需要一种设计标准,
来统一所有可遍历类型的遍历方式。
Iterator正是这样一种标准。或者说是一种规范理念。 就好像JavaScript是ECMAScript标准的一种具体实现一样,
Iterator标准的具体实现是Iterator遍历器。
Iterator标准规定,所有部署了key值为[Symbol.iterator],
且[Symbol.iterator]的value是标准的Iterator接口函数(标准的Iterator接口函数:
该函数必须返回一个对象,
且对象中包含next方法,
且执行next()能返回包含value/done属性的Iterator对象)的对象,
都称之为可遍历对象,
next()后返回的Iterator对象也就是Iterator遍历器。 obj就是可遍历的,
因为它遵循了Iterator标准,
且包含[Symbol.iterator]方法,
方法函数也符合标准的Iterator接口规范。 //obj.[Symbol.iterator]()
就是Iterator遍历器
let obj =
{
data: [ 'hello', 'world' ], [Symbol.iterator]()
{ const self = this; let index = ;
return { next() {
if (index < self.data.length) {
return { value: self.data[index++], done: false
};
} else {
return { value: undefined, done: true }; } } }; }
};
ES6给Set、Map、Array、String都加上了[Symbol.iterator]方法,
且[Symbol.iterator]方法函数也符合标准的Iterator接口规范,
所以Set、Map、Array、String默认都是可以遍历的。 //Array let array = ['red', 'green', 'blue']; array[Symbol.iterator]()
//Iterator遍历器 array[Symbol.iterator]().next()
//{value: "red", done: false} //String let string = '1122334455'; string[Symbol.iterator]()
//Iterator遍历器 string[Symbol.iterator]().next()
//{value: "1", done: false}
//set let set = new Set(['red', 'green', 'blue']); set[Symbol.iterator]()
//Iterator遍历器 set[Symbol.iterator]().next()
{value: "red", done: false}
Map let map = new Map();
let obj= {map: 'map'};
map.set(obj, 'mapValue');
map[Symbol.iterator]().next()
{value: Array(), done: false}
4.module、export、import是什么,有什么作用?
module、export、import
是ES6用来统一前端模块化方案的设计思路和实现方案。 export、import的出现统一了前端模块化的实现方案,
整合规范了浏览器/服务端的模块化方法,
用来取代传统的AMD/CMD、requireJS、seaJS、commondJS等等一系列前端模块不同的实现方案,
使前端模块化更加统一规范,
JS也能更加能实现大型的应用程序开发。 import引入的模块是静态加载(编译阶段加载)
而不是动态加载(运行时加载)。 import引入export导出的接口值是动态绑定关系,
即通过该接口,可以取到模块内部实时的值。
5.日常前端代码开发中,有哪些值得用ES6去改进的编程优化或者规范?
、常用箭头函数来取代var self = this;的做法。 、常用let取代var命令。 、常用数组/对象的结构赋值来命名变量,结构更清晰,语义更明确,可读性更好。 、在长字符串多变量组合场合,用模板字符串来取代字符串累加,能取得更好地效果和阅读体验。 、用Class类取代传统的构造函数,来生成实例化对象。 、在大型应用开发中,要保持module模块化开发思维,分清模块之间的关系,常用import、export方法。
撩课-Web大前端每天5道面试题-Day24的更多相关文章
- 撩课-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引擎速度非常快 对于游戏来说,写一遍游戏逻辑代码,前端后端通 ...
随机推荐
- linux常用命令大全(linux基础命令入门到精通+命令备忘录+面试复习+实例)
作者:蓝藻(罗蓝国度) 创建时间:2018.7.3 编辑时间:2019.4.29 前言 本文特点 授之以渔:了解命令学习方法.用途:不再死记硬背,拒绝漫无目的: 准确无误:所有命令执行通过(环境为ce ...
- SAX,功能强大的 API
https://www.ibm.com/developerworks/cn/xml/x-saxapi/ SAX,功能强大的 API 在摘自 XML by Example 的本篇预览中比较了 DOM 和 ...
- css实现响应式九宫格效果
1. 首先看下九宫格的效果图: 2. html代码比较简单,如下: <div class="main"> <div class="box1"& ...
- 【loj6437】 【PKUSC2018】 PKUSC 计算几何
题目大意:给你一个m个点的简单多边形.对于每个点i∈[1,n],作一个以O点为原点且过点i的圆,求该圆在多边形内的圆弧长度/圆长. 其中n≤200,m≤500. 我们将n个点分开处理. 首先,我们要判 ...
- 如何正确的加载和执行 JavaScript 代码
无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaScript 执行过程耗时越久,浏览器等待响应用户输入的时间就越长.浏览器在下载和执行 ...
- apache2.4配置weblogic12c集群(linux环境)
首先确定环境已装apache2.4,没装的话可以看下这篇文章apache2.4一键脚本安装(linux环境) 1.下载apache分发模块mod_wl_24.so 下载apache2.4的weblog ...
- CSS3 :nth-child(n)使用注意
:nth-child(n) ---->选中某个元素,该元素必须是某个父元素下的第n个子元素: p:nth-child(n) ---->选中p元素,且该p元素必须是某个父元素下的第 ...
- 第12章—使用NoSQL数据库—使用MongoDB+Jpa操作数据库
使用MongoDB+Jpa操作数据库 SpringData还提供了对多种NoSQL数据库的支持,包括MongoDB;neo4j和redis.他不仅支持自动化的repository,还支持基于模板的数据 ...
- puppet的使用:安装puppet
最近项目要使用puppet,趁机赶紧学习下. 在家里的机器中搭建puppet环境,使用两台ubuntu 14.04: 准备工作 时间同步 两台设备先进行时间同步,我把要安装master的机器作为NTP ...
- C/C++ -- Gui编程 -- Qt库的使用 -- Qt编码问题
1.直接使用QObject::trUtf8("中文字符串") 2.头文件<QTextCodec>QTextCodec::setCodecForTr(QTextCodec ...