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

解析:

A、Fun() 把 class 当成方法来用? var fun = new Func() 这样用就对了
B、export 后面变量没加括号;
D、import readFile 没加括号,是导入 default 的用法,但是前面不是 export 为 default
参照 export 和 import 用法:
1、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
2、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
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相关推荐

  1. js经典试题之数据类型

    js经典试题之数据类型 1:输出"B" + "a" + + "B" + "a"的值: 答案:BaNaNa. 分析:因为+ ...

  2. 2023前端面试题------JS 面试题(2) es6

    2023前端面试题------es6 面试题 三. JS高频面试题 15. 事件循环 16. 微任务和宏任务 17. http相关 18. 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生 ...

  3. JS面试题汇总(Es6)

    Let 有块级作用域 不存在变量声明提前 不允许重复声明 声明的全局变量不会挂在到window上 const 声明一个只读的常量.一旦声明,常量的值就不能改变 有块级作用域 不存在变量声明提前 不允许 ...

  4. 前端面试题 HTML、CSS、JS、Vue、Es6

    第一部分 HTML&CSS整理答案 什么是HTML5? 答:HTML5是最新的HTML标准. 注意:讲述HTML5推出的设计目的,以及现在市场的使用情况,浏览器支持情况等.... 设计目的 H ...

  5. JavaScript前端经典面试题之ES6面试题汇总es6

    推荐阅读: vue3面试题:最新vue3.0前端经典面试试题及答案(持续更新中--)_南北极之间的博客-CSDN博客打包大小减少41%初次渲染快55%, 更新渲染快133%内存减少54%......使 ...

  6. (五)不只是 huohuo 的 JS 面试题

    写过最多的是 JS 相关的文章,做过最完整的是 JS 的思维导图,敲过最多的依然是 JS 代码,我觉得自己的 JS 还算可以了.写到这里的时候,我已经离职一周,也参加了几次面试,大多数问题都能按自己的 ...

  7. js高级:面向对象+ES6

    js高级:面向对象+ES6 文章目录 js高级:面向对象+ES6 day01 一.ES6中的类和对象 1.1对象 1.2类 1.3创建类 1.4类constructor构造函数 1.5类中添加方法 1 ...

  8. js面试题继承的方法及优缺点解答

    这篇文章主要为大家介绍了js面试题继承的方法及优缺点解答,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 目录 说一说js继承的方法和优缺点? 一.原型链继承 二.借用构造 ...

  9. 2017面试分享(js面试题记录)

    2017面试分享(js面试题记录) 1. 最简单的一道题 '11' * 2'a8' * 3 2. 一道this的问题 var num = 10;var obj = {num:8,inner: {num ...

最新文章

  1. 数据库设计:关于枚举类型的表结构设计法,个人拙见
  2. jenkins rec 分析 cve-2018-1000861 分析
  3. python polygon函数_Python 人脸识别就多简单,看这个就够了!
  4. 95后女孩成最年轻“航天人”,团队里女孩占一半,老一辈退休年轻人挑大梁啦...
  5. 机器学习速成课程 | 练习 | Google Development——编程练习:(TensorFlow) Hello World
  6. dup java_java web----TCP/DUP 通信
  7. 关于在下次升级中向Cosmos Hub添加流动性模块的提案发布
  8. [分享]如何开机后直接进入桌面
  9. cc2530设计性实验代码八
  10. HTML4到HTML5的新增内容,你知道吗?
  11. Java类加载机制与Tomcat类加载器架构
  12. C语言学生成绩管理系统大纲,C语言教学大纲
  13. canvas教程14-资源管理器
  14. 动态规划 最长不下降子序列
  15. python读文件夹图片,做数据集
  16. 阿里云图像识别Java调用示例参考
  17. python/gurobi计算二人零和博弈纳什均衡精确解(可求解大规划策略空间)
  18. P8318 『JROI-4』淘气的猴子(【LGR-108】洛谷 5 月月赛 I JROI R4 Div.2)
  19. vscode配置opencv环境,包括opencv源码编译(mingw64 + cmake)
  20. 内网代理穿透1:nc代理穿透

热门文章

  1. dbcp2和dbcp 1.4在API层面的差异
  2. mysql开启binlog
  3. Nginx使用http_accesskey_module防盗链,告别referer,告别伪装
  4. 三星笔记本又发新品,这一次仍然惊艳
  5. Emm,qW3xT.2(矿机进程)
  6. 双线路切换-冗余备份实验
  7. http://blog.csdn.net/u011001723/article/details/456210272222
  8. 架构师是如何炼成的?以天猫APP架构开发模式升级工程为例
  9. Oracle HA 之 Server Pool 实战
  10. oracle10G导入导出数据文件