js经典试题之ES6
js经典试题之ES6
1:在ECMAScript6 中,Promise的状态
答案:pending resolved(fulfilled) rejected
解析:
Promise对象只有三种状态:
异步操作“未完成”(pending)—— 异步操作“已完成”(resolved,又称fulfilled)—— 异步操作“失败”(rejected)
这三种的状态的变化途径只有两种:
异步操作从“未完成”到“已完成”——异步操作从“未完成”到“失败”。
这种变化只能发生一次,一旦当前状态变为“已完成”或“失败”,就意味着不会再有新的状态变化了。因此,Promise对象的最终结果只有两种:
异步操作成功,Promise对象传回一个值,状态变为resolved。——异步操作失败,Promise对象抛出一个错误,状态变为rejected。
2:以下符合 ES6 写法的有:
class Foo
{constructor() {return Object.create(null);}
}
Foo()
var m=1;
export m;
export var firstName=’Michael’;
在A模块中export{readFile}后,在B模块中import readFile from ‘A’可以获取到readFile
答案: C
解析:
export {name1,name2, …,nameN};
export {variable1asname1,variable2asname2, …,nameN};
export letname1,name2, …,nameN; // also var
export letname1= …,name2= …, …,nameN; // also var, const
export expression;
export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export {name1as default, … };
export * from …;
export {name1,name2, …,nameN} from …;
export {import1asname1,import2asname2, …,nameN} from …;
import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";
3:以下代码的输出结果
setTimeout(function(){console.log(4)},0);new Promise(function(resolve){console.log(1)for( var i=0 ; i<10000 ; i++ ){i==9999 && resolve()}console.log(2)}).then(function(){console.log(5)});console.log(3);
答案: 1 2 3 5 4
解析:因为 setTimeout 是属于 macrotask 的,而整个 script 也是属于一个 macrotask, promise.then 回调 是 microtask ,执行过程大概如下:
- 由于整个 script 也属于一个 macrotask, 由于会先执行 macrotask 中的第一个任务,再加上promise 构造函数因为是同步的,所以会先打印出 1和2
- 然后继续同步执行末尾的 console.log(3) 打印出3
- 此时 setTimeout 被推进到 macrotask 队列中, promise.then 回调被推进到 microtask 队列中
- 由于在第一步中已经执行完了第一个 macrotask , 所以接下来会顺序执行所有的 microtask, 也就是 promise.then 的回调函数,从而打印出5
- microtask 队列中的任务已经执行完毕,继续执行剩下的 macrotask 队列中的任务,也就是 setTimeout, 所以打印出 4
macrotasks: setTimeout setInterval setImmediate I/O UI渲染
microtasks: Promise process.nextTick Object.observe MutationObserver
4、关于 javascript 模块化,AMD和CMD的含义和区别
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
AMD也采用require()语句加载模块,但是不同于CommonJS。
主要有两个Javascript库实现了AMD规范:require.js和curl.js。
AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
区别:
1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。
2. CMD 推崇依赖就近,AMD 推崇依赖前置。
CMD 默认推荐的是
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此处略去 100 行
var b = require('./b') // 依赖可以就近书写
b.doSomething()
// ...
})
AMD 默认推荐的是
define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
// 此处略去 100 行
b.doSomething()
...
})
5、以下代码会输出什么
class Foo {constructor (name) {this.name = name}greet () {console.log('hello, this is ', this.name)}someThingAsync () {return Promise.resolve()}asyncGreet () {this.someThingAsync().then(this.greet)}
}
new Foo('dog').asyncGreet()
答案:Cannot read property 'name' of undefined
解析:greet 没有在正确的上下文中运行。,这个问题依然有很多解决方案。
asyncGreet() {this.someThingAsync().then(this.greet.bind(this))
}
也可以在类的constructor中绑定它:
constructor(name) {this.name = namethis.greet = this.greet.bind(this)
}
转载于:https://www.cnblogs.com/momozjm/p/7797456.html
js经典试题之ES6相关推荐
- js经典试题之数据类型
js经典试题之数据类型 1:输出"B" + "a" + + "B" + "a"的值: 答案:BaNaNa. 分析:因为+ ...
- 2023前端面试题------JS 面试题(2) es6
2023前端面试题------es6 面试题 三. JS高频面试题 15. 事件循环 16. 微任务和宏任务 17. http相关 18. 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生 ...
- JS面试题汇总(Es6)
Let 有块级作用域 不存在变量声明提前 不允许重复声明 声明的全局变量不会挂在到window上 const 声明一个只读的常量.一旦声明,常量的值就不能改变 有块级作用域 不存在变量声明提前 不允许 ...
- 前端面试题 HTML、CSS、JS、Vue、Es6
第一部分 HTML&CSS整理答案 什么是HTML5? 答:HTML5是最新的HTML标准. 注意:讲述HTML5推出的设计目的,以及现在市场的使用情况,浏览器支持情况等.... 设计目的 H ...
- JavaScript前端经典面试题之ES6面试题汇总es6
推荐阅读: vue3面试题:最新vue3.0前端经典面试试题及答案(持续更新中--)_南北极之间的博客-CSDN博客打包大小减少41%初次渲染快55%, 更新渲染快133%内存减少54%......使 ...
- (五)不只是 huohuo 的 JS 面试题
写过最多的是 JS 相关的文章,做过最完整的是 JS 的思维导图,敲过最多的依然是 JS 代码,我觉得自己的 JS 还算可以了.写到这里的时候,我已经离职一周,也参加了几次面试,大多数问题都能按自己的 ...
- js高级:面向对象+ES6
js高级:面向对象+ES6 文章目录 js高级:面向对象+ES6 day01 一.ES6中的类和对象 1.1对象 1.2类 1.3创建类 1.4类constructor构造函数 1.5类中添加方法 1 ...
- js面试题继承的方法及优缺点解答
这篇文章主要为大家介绍了js面试题继承的方法及优缺点解答,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 目录 说一说js继承的方法和优缺点? 一.原型链继承 二.借用构造 ...
- 2017面试分享(js面试题记录)
2017面试分享(js面试题记录) 1. 最简单的一道题 '11' * 2'a8' * 3 2. 一道this的问题 var num = 10;var obj = {num:8,inner: {num ...
最新文章
- 数据库设计:关于枚举类型的表结构设计法,个人拙见
- jenkins rec 分析 cve-2018-1000861 分析
- python polygon函数_Python 人脸识别就多简单,看这个就够了!
- 95后女孩成最年轻“航天人”,团队里女孩占一半,老一辈退休年轻人挑大梁啦...
- 机器学习速成课程 | 练习 | Google Development——编程练习:(TensorFlow) Hello World
- dup java_java web----TCP/DUP 通信
- 关于在下次升级中向Cosmos Hub添加流动性模块的提案发布
- [分享]如何开机后直接进入桌面
- cc2530设计性实验代码八
- HTML4到HTML5的新增内容,你知道吗?
- Java类加载机制与Tomcat类加载器架构
- C语言学生成绩管理系统大纲,C语言教学大纲
- canvas教程14-资源管理器
- 动态规划 最长不下降子序列
- python读文件夹图片,做数据集
- 阿里云图像识别Java调用示例参考
- python/gurobi计算二人零和博弈纳什均衡精确解(可求解大规划策略空间)
- P8318 『JROI-4』淘气的猴子(【LGR-108】洛谷 5 月月赛 I JROI R4 Div.2)
- vscode配置opencv环境,包括opencv源码编译(mingw64 + cmake)
- 内网代理穿透1:nc代理穿透
热门文章
- dbcp2和dbcp 1.4在API层面的差异
- mysql开启binlog
- Nginx使用http_accesskey_module防盗链,告别referer,告别伪装
- 三星笔记本又发新品,这一次仍然惊艳
- Emm,qW3xT.2(矿机进程)
- 双线路切换-冗余备份实验
- http://blog.csdn.net/u011001723/article/details/456210272222
- 架构师是如何炼成的?以天猫APP架构开发模式升级工程为例
- Oracle HA 之 Server Pool 实战
- oracle10G导入导出数据文件